NodeJS xây dựng API REST
TL;DR. Trong bài viết này, bạn sẽ tìm hiểu cách phát triển API RESTful với Node. js, Express và Auth0. Bạn sẽ bắt đầu lại từ đầu, xây dựng một Node mới. js, thì bạn sẽ thực hiện tất cả các bước cần thiết để xây dựng một API an toàn. Bạn có thể kiểm tra mã đầy đủ được phát triển trong suốt bài viết này trong kho lưu trữ GitHub này Show
điều kiện tiên quyếtĐể theo dõi bài viết này, bạn sẽ cần có kiến thức trước về JavaScript. Nếu bạn chưa từng sử dụng JavaScript trước đây (ngay cả khi phát triển giao diện người dùng), bạn có thể không hiểu rõ bài viết và bạn nên tìm hiểu về nó trước. Nếu bạn đã có kinh nghiệm với JavaScript trước đây, nhưng bạn chưa sử dụng Node. js, đừng lo lắng, bạn sẽ không gặp khó khăn gì ở đây. Mặc dù sẽ là lý tưởng nếu bạn biết một chút về Node. js, bạn sẽ thấy mã và các khái niệm được giải thích trong bài viết này không phức tạp Ngoài ra, bạn sẽ cần phải có Node. js và NPM được cài đặt trong máy của bạn. Nếu bạn không có những thứ này, vui lòng làm theo hướng dẫn ở đây Những gì bạn sẽ xây dựngNhư đã đề cập trước đây, trong bài viết này, bạn sẽ bắt đầu lại từ đầu (tôi. e. , từ một thư mục trống), thì bạn sẽ thực hiện tất cả các bước cần thiết để xây dựng một API RESTful an toàn. API mà bạn sẽ xây dựng sẽ cho phép các máy khách (ứng dụng của bên thứ ba) đưa ra các yêu cầu để thao túng tài nguyên. Trong trường hợp này, các tài nguyên sẽ đại diện cho các quảng cáo (như trong các sản phẩm hoặc dịch vụ được quảng cáo) mà người dùng sẽ tạo, truy xuất, cập nhật và xóa Nếu bạn không biết API RESTful là gì hoặc thuật ngữ này viết tắt của từ gì, hãy xem định nghĩa và giải thích ngắn gọn về API RESTful này
Để biết thêm thông tin, hãy kiểm tra các tài nguyên sau
Xây dựng và bảo mật API RESTfulBây giờ bạn đã biết mình sẽ tạo gì và điều kiện tiên quyết là gì, đã đến lúc bắt đầu xây dựng ứng dụng của bạn. Để bắt đầu, hãy mở một thiết bị đầu cuối, di chuyển nó đến thư mục mà bạn thường tạo các dự án của mình và tạo một thư mục mới ở đó
Sau đó, di chuyển vào thư mục mới này và sử dụng 8 để tạo một dự án mới
Lệnh trên sẽ dàn dựng dự án với một số thuộc tính mặc định. Nếu bạn mở thư mục này trong một trình soạn thảo văn bản hoặc trong một IDE (như Visual Studio Code hoặc WebStorm), bạn sẽ thấy lệnh 8 mà bạn đưa ra đã tạo một tệp có tên là 0. Mở tệp này, bạn sẽ thấy nội dung sau
Ngay bây giờ, tệp này khá ngắn và không có nhiều thông tin thú vị (nó chỉ hiển thị một số thuộc tính như dự án 1, 2 và 3). Tuy nhiên, khi bạn bắt đầu thêm các phụ thuộc vào dự án của mình, xu hướng là tệp này sẽ phát triển và trở nên thú vị hơnTiếp theo, bạn sẽ tạo một thư mục mới có tên là 4 bên trong thư mục gốc của dự án________số 8Ý tưởng ở đây là đặt tất cả mã nguồn của bạn (i. e. , các tệp JavaScript) bên trong thư mục này. Vì vậy, sau khi tạo thư mục này, hãy tạo một tệp mới có tên 5 bên trong nó và thêm đoạn mã sau vào đó 6Sau khi lưu tệp này, bạn có thể quay lại thiết bị đầu cuối của mình và đưa ra lệnh sau để kiểm tra tệp (đảm bảo bạn đang ở gốc dự án) 7Nếu mọi thứ hoạt động như mong đợi, bạn sẽ thấy "Xin chào, thế giới. " được in ra trong thiết bị đầu cuối của bạn Tạo API Express đầu tiên của bạnNgay bây giờ, dự án bạn đã tạo chỉ ghi một thông báo tĩnh. Vì điều này không hữu ích lắm, sau khi xây dựng "Xin chào, thế giới" của bạn. " ứng dụng với Node. js, bạn có thể bắt đầu tập trung vào việc tạo API RESTful. Đối với điều đó, điều đầu tiên bạn cần là cài đặt một số phụ thuộc. Vì vậy, hãy đến thiết bị đầu cuối của bạn và đưa ra lệnh sau 8Lệnh này sẽ cài đặt năm phụ thuộc trong dự án của bạn
Khi NPM hoàn tất cài đặt các phụ thuộc này (có thể mất vài giây, tùy thuộc vào kết nối internet của bạn), bạn có thể mở tệp 5 và thay thế mã của nó bằng mã sau 8Phiên bản mới của tệp này bắt đầu bằng cách nhập tất cả các phụ thuộc mà bạn đã cài đặt lúc trước, trải qua quá trình tạo và cấu hình ứng dụng Express mới ( 65) và kết thúc bằng cách làm cho ứng dụng này lắng nghe trên cổng 66 ( 67). Bên cạnh đó, mã này xác định hai điều quan trọng
Sau khi cập nhật tệp này, bạn có thể phát hành lại 75 từ thư mục gốc của dự án. Sau đó, trong một thiết bị đầu cuối khác, bạn có thể sử dụng 76 để đưa ra yêu cầu HTTP để kiểm tra API của mình 1
Nếu muốn, bạn cũng có thể sử dụng ứng dụng khách HTTP đồ họa như Insomnia hoặc Postman. Ví dụ: ảnh chụp màn hình bên dưới hiển thị Mất ngủ sau khi đưa ra yêu cầu tới API Express Bất kể bạn quyết định đưa ra yêu cầu như thế nào, sau khi nhận được yêu cầu, ứng dụng sẽ ủy quyền yêu cầu này cho điểm cuối 80. Sau đó, như đã định nghĩa, điểm cuối sẽ gửi lại cho máy khách phản hồi sau (i. e. , mảng 68) 7Tích hợp Express và MongoDBKhi nói đến cơ sở dữ liệu, sự lựa chọn phổ biến nhất giữa các Node. js (cho đến nay) là MongoDB. Công cụ cơ sở dữ liệu này cho phép các nhà phát triển sử dụng mô hình dữ liệu tài liệu linh hoạt hoạt động đặc biệt tốt với Node. ứng dụng js. Như bạn sẽ thấy trong suốt bài viết, thao tác cơ sở dữ liệu MongoDB từ một Nút. ứng dụng js dễ dàng và hiệu quả Tuy nhiên, trước khi tìm hiểu về cách làm cho API Express của bạn vận hành MongoDB, bạn sẽ cần một phiên bản cơ sở dữ liệu. Vì vậy, bạn có một số tùy chọn như cài đặt MongoDB trong máy của mình, chạy nó trong vùng chứa hoặc sử dụng nhà cung cấp đám mây như MongoDB Atlas. Tuy nhiên, để tạo thuận lợi cho quá trình này, bạn sẽ sử dụng một gói có tên là 82 để khởi tạo một phiên bản MongoDB theo chương trình để thử nghiệm hoặc mô phỏng trong quá trình phát triển. Điều thú vị về thư viện này là theo mặc định, nó chứa dữ liệu trong bộ nhớ. Ngoài ra, bạn sẽ cài đặt gói NPM 83 chính thức để làm cho ứng dụng của bạn tương tác với cơ sở dữ liệu trong bộ nhớ nàyVì vậy, hãy quay lại thiết bị đầu cuối của bạn, sử dụng 8 để cài đặt các gói này 0Sau khi cài đặt chúng, hãy tạo một thư mục mới có tên là 85 bên trong thư mục 4 và bên trong đó, tạo một tệp mới có tên là 87. Bên trong tệp này, thêm đoạn mã sau 1Như bạn có thể thấy, tệp này 88 có hai chức năng. Một để khởi tạo cơ sở dữ liệu trong bộ nhớ ( 89) và một để trả về một tham chiếu đến nó ( 80)Với điều đó, hãy tạo một tệp mới có tên là 81 bên trong thư mục 85 và thêm đoạn mã sau vào đó 2Tệp 81 cũng đang xác định và xuất hai hàm. Tuy nhiên, sự khác biệt là tệp này xuất một chức năng cho phép bạn chèn quảng cáo vào cơ sở dữ liệu ( 84) và một chức năng truy xuất tất cả các bản ghi vẫn tồn tại ở đó ( 85). Lưu ý rằng cả hai hàm này đều sử dụng hàm 80 do tệp 87 xuất để lấy tham chiếu trỏ đến cơ sở dữ liệu trong bộ nhớ của bạnSau khi tạo tệp này, hãy mở tệp 5 và cập nhật nó như sau 3Với việc tái cấu trúc này, bạn là
Lưu ý rằng bạn đang thay thế việc triển khai trước đó của điểm cuối 4 để ngừng trả về mảng tĩnh 68 và bắt đầu trả về các bản ghi có sẵn bên trong cơ sở dữ liệu. Như vậy, bạn có thể bỏ dòng xác định hằng số 68Khi hoàn tất việc tái cấu trúc, bạn có thể dừng API của mình (bằng cách nhấn vào 16 + 17), bắt đầu lại ( 75) và đưa ra yêu cầu HTTP giống như trước đây ( 19). Sự khác biệt là bây giờ, API của bạn sẽ phản hồi bằng một mảng chứa một đối tượng có hai thuộc tính. 70 (giống như trước đây) và 71 (đề cập đến khóa chính của nó trên cơ sở dữ liệu)Thêm điểm cuối để cho phép khách hàng chèn, cập nhật và xóa tài nguyênBây giờ bạn đã tích hợp API Express với MongoDB, đã đến lúc triển khai các động từ HTTP khác (tôi. e. , các điểm cuối khác). Trong phần này, bạn sẽ thêm ba điểm cuối mới vào API của mình
Để thêm các điểm cuối này, bạn sẽ bắt đầu bằng cách xác định các chức năng sẽ tương tác với phiên bản MongoDB của bạn. Vì vậy, hãy mở tệp 81 (tệp này nằm trong thư mục 85) và cập nhật nó như sau 4Ở đây, bạn chỉ thêm hai chức năng mới ( 77 và 78) bởi vì bạn đã có một chức năng cho phép chèn quảng cáo mới ( 84). Lưu ý rằng cả hai hàm mới đều cần một phần tử có tên là 00 để có thể cho cơ sở dữ liệu biết bạn muốn cập nhật hoặc xóa phần tử cụ thể nàoMột điều quan trọng khác cần nắm bắt là đối tượng được chuyển đến thuộc tính 01 trong hoạt động 02. Trong khi cập nhật tài liệu trong cơ sở dữ liệu MongoDB, bạn chỉ có thể thông báo các thuộc tính đã thay đổi và bỏ qua bất kỳ thuộc tính nào vẫn giữ nguyên. Ví dụ: nếu bạn có một đối tượng trong cơ sở dữ liệu của mình với các trường có tên là 1, 04 và 05, thì bạn chỉ có thể chuyển đến 01 thuộc tính 04 để thay đổi nó trong khi không động đến phần còn lại. Nếu điều này vẫn chưa rõ ràng, bạn sẽ thấy điều này đang hoạt động trong giây látSau khi cấu trúc lại tệp này, bạn sẽ phải mở tệp 5 và cập nhật nó như sau 5Trên phiên bản mới của tệp này, bạn đang thêm các điểm cuối chịu trách nhiệm cho ba động từ HTTP được đề cập trước đó ( 6, 7 và 5). Điều quan trọng cần lưu ý ở đây là bạn đang sử dụng tham số Express route để có thể tìm nạp, từ URL được yêu cầu, ________ 612 của quảng cáo mà bạn muốn xóa hoặc cập nhật (________ 613). Ngoài ra, như bạn có thể thấy trên cả hai điểm cuối 14 và 15, bạn sẽ nhận được thông tin chi tiết về quảng cáo được chèn hoặc cập nhật từ nội dung yêu cầu ( 16)Sau khi thay đổi tệp này, bạn có thể dừng API của mình (bằng cách nhấn 16 + 17), bắt đầu lại ( 75) và đưa ra một số yêu cầu HTTP (như được trình bày trong đoạn mã sau) để kiểm tra các điểm cuối mới 6
Nếu mọi thứ hoạt động như mong đợi, yêu cầu đầu tiên sẽ duy trì một quảng cáo mới trong API của bạn, yêu cầu thứ hai sẽ trả về tất cả các quảng cáo được duy trì ở đó, yêu cầu thứ ba sẽ cập nhật giá của quảng cáo mới (từ 22 đến 23) và yêu cầu thứ tư Trên yêu cầu 5, bạn có thể thấy rằng bạn chỉ chuyển một trường trên nội dung yêu cầu ( 25). Vì đối tượng 01 được chuyển cho hoạt động 02 đang sử dụng chính phần thân này để cập nhật quảng cáo, nên 70 của quảng cáo (là "Pizza") sẽ không bị thay đổi. Gọn gàng, phải không?Bảo mật API Express với Auth0Hiện tại, bạn có API Express hiển thị các điểm cuối cho phép khách hàng chèn, cập nhật, xóa và truy xuất quảng cáo. Đây là một khởi đầu tốt, nhưng bạn có thể sử dụng một số bảo mật, phải không? Ví dụ: giả sử bạn muốn cho phép tất cả người dùng (bất kể họ là khách truy cập hay họ được xác thực) liệt kê quảng cáo, nhưng bạn chỉ muốn những người dùng được xác thực mới có thể chèn, cập nhật và xóa đối tượng. Bạn sẽ làm điều này như thế nào? Như bạn sẽ thấy trong phần này, việc bảo mật API Express bằng Auth0 rất dễ dàng. Để bắt đầu, bạn sẽ cần đăng ký Auth0 để có thể tích hợp nó vào API của mình. Nếu bạn đã có một tài khoản hiện tại, bạn có thể sử dụng nó mà không gặp vấn đề gì. Nếu bạn chưa có, bây giờ là thời điểm tốt để đăng ký tài khoản Auth0 miễn phí. Điều thú vị về Auth0 là với tài khoản miễn phí của mình, bạn sẽ có quyền truy cập vào các tính năng sau
Dùng thử miễn phí nền tảng xác thực mạnh mẽ nhất. Bắt đầu → Sau khi đăng ký, bạn sẽ phải tạo API Auth0 để đại diện cho dự án Express của mình. Vì vậy, hãy chuyển đến phần API trên Bảng điều khiển Auth0 của bạn và nhấp vào nút Tạo API. Khi bạn nhấp vào nút này, Auth0 sẽ hiển thị cho bạn một hộp thoại trong đó nó sẽ hỏi bạn ba điều
Sau khi điền vào biểu mẫu này, nhấp vào nút Tạo. Sau đó, quay lại thiết bị đầu cuối, đưa ra lệnh sau 7Tại đây, bạn đang cài đặt hai thư viện mới
Sau đó mở file 34 và import các thư viện này như sau 8Vẫn trên tệp này, hãy tạo hằng số sau ( 35) ngay trước điểm cuối 6 ( 37) 9Hằng số này thực sự là một phần mềm trung gian Express sẽ xác thực mã thông báo truy cập. Lưu ý rằng, để làm cho nó hoạt động, bạn sẽ phải thay thế trình giữ chỗ 38 bằng mã định danh của API Auth0 mà bạn đã tạo (e. g. , 29). Ngoài ra, bạn sẽ phải thay thế 40 bằng tên miền Auth0 của mình (e. g. , 41)
Với điều đó, bạn có thể bảo mật các điểm cuối 14, 15 và 45 bằng cách thêm dòng sau ngay trước định nghĩa của chúng 0Trên đoạn mã trên, bạn đang định cấu hình ứng dụng Express thành 46 phần mềm trung gian 35. Lưu ý rằng, vì bạn đang xác định nó sau điểm cuối 48, phần mềm trung gian 35 sẽ không chặn các yêu cầu đến điểm cuối này. Theo cách tương tự, khi bạn xác định nó trước các điểm cuối ________ 614, ________ 645 và ________ 615, phần mềm trung gian ________ 635 sẽ chặn các yêu cầu đối với chúngSau khi thực hiện thay đổi này, hãy khởi động lại API của bạn (bằng cách nhấn vào 16 + 17, sau đó phát hành 75 để bắt đầu lại) và đưa ra yêu cầu sau để xác nhận rằng điểm cuối 48 vẫn công khai 1Nếu mọi thứ hoạt động như mong đợi, bạn vẫn có thể tìm nạp quảng cáo từ điểm cuối này. Tuy nhiên, nếu bạn cố gắng gửi yêu cầu tới bất kỳ điểm cuối nào khác, bạn sẽ gặp lỗi cho biết "Không tìm thấy mã thông báo ủy quyền nào" 2Để có thể sử dụng lại các điểm cuối này, bạn sẽ cần có mã thông báo truy cập. Quá trình nhận mã thông báo sẽ phụ thuộc vào loại khách hàng bạn đang giao dịch. Điều này nằm ngoài phạm vi ở đây, nhưng nếu bạn đang xử lý một ứng dụng SPA (như những ứng dụng được tạo bằng React, Angular và Vue. js), bạn có thể sử dụng thư viện NPM 58. Nếu bạn đang giao dịch với một số loại khách hàng khác (e. g. , ứng dụng web thông thường hoặc ứng dụng gốc), hãy xem tài liệu của Auth0 để biết thêm thông tinTuy nhiên, để xem toàn bộ hoạt động, bạn có thể quay lại Trang tổng quan Auth0 của mình, mở API bạn đã tạo trước đó và chuyển đến phần Kiểm tra. Trong phần này, bạn sẽ thấy một nút có tên Sao chép mã thông báo sẽ cung cấp cho bạn mã thông báo tạm thời mà bạn có thể sử dụng để kiểm tra API của mình Vì vậy, hãy nhấp vào nút này và sau đó sử dụng ứng dụng khách HTTP của bạn để đưa ra yêu cầu tới API của bạn bằng mã thông báo thử nghiệm 3Nếu mọi thứ hoạt động như mong đợi, bạn sẽ có thể sử dụng lại các điểm cuối API của mình. Tuyệt nhỉ?
Sự kết luậnTrong bài viết này, bạn đã tìm hiểu về việc phát triển API RESTful dễ dàng như thế nào với Express và Node. js. Cụ thể hơn, bạn đã bắt đầu bằng cách sử dụng 8 để tạo ra một ứng dụng hoàn toàn mới. Sau đó, bạn đã sử dụng Express để hiển thị các điểm cuối API nhằm thao túng quảng cáo. Sau đó, cuối cùng, bạn đã học cách bảo mật API của mình bằng Auth0Với thiết lập này, bạn đã sẵn sàng tiếp tục và bắt đầu xây dựng các API sẵn sàng sản xuất của mình được hỗ trợ bởi Node. js, Express, Mongo và Auth0. Tuy nhiên, trước khi làm như vậy, một điều quan trọng mà bạn có thể muốn tìm hiểu là 60, một phần mềm trung gian Express giúp bạn xác thực dữ liệu do người dùng gửi. Đối với điều đó, hãy kiểm tra bài viết này chúng tôi đã xuất bản gần đây
NodeJS có TỐT CHO API REST không?Nút. js có cộng đồng lớn và tích cực đóng góp nhiều mô-đun hữu ích và trưởng thành, có thể dễ dàng đưa vào và sử dụng. Ví dụ: để xây dựng API REST, các mô-đun đã biết như express, restify và hapi hoàn toàn phù hợp .
API REST trong NodeJS là gì?API REST là giao diện lập trình ứng dụng tuân thủ các ràng buộc của kiểu kiến trúc REST và cho phép tương tác với các dịch vụ web RESTful . Các mạng được kết nối với nhau tạo nên trang web. Dịch vụ web là một tập hợp các giao thức và tiêu chuẩn mở được sử dụng để trao đổi dữ liệu giữa các ứng dụng máy khách-máy chủ.
Khung NodeJS nào tốt hơn để xây dựng API RESTful?Quay lại.
js cung cấp khả năng kết nối tốt hơn với bất kỳ Nút nào. js và bạn có thể tích hợp nó với một số dịch vụ API khác nhau. Nền tảng hoạt động tốt nhất trong việc tạo API REST với thời gian phát triển tối thiểu.
NodeJS có còn nhu cầu không?Công cụ JavaScript phổ biến này đã tồn tại hàng thập kỷ, nhưng nhu cầu về những người có thể thành thạo công cụ này vẫn đang tăng mạnh . |