Hãy tưởng tượng rằng bạn đang xây dựng một RESTful API NodeJS để tạo, cập nhật, gọi thông tin hoặc xóa người dùng. Với các tính năng đó HTTP đã cung cấp một bộ đầy đủ các phương thức.
OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
7, OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
8, OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
9, OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
0 và OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
1Cách tối ưu nhất là các tuyến API của bạn nên chỉ sử dụng danh từ như các định danh tài nguyên. Các tuyến đường khi đó sẽ giống như thế này
0 hayOpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
1 để tạo người dùng mớiOpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
2 để lấy danh sách người dùngOpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
3 để lấy thông tin của một người dùngOpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
4 để sửa bản ghi người dùng đã cóOpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
5 để xóa một người dùngOpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
Vui lòng tham khảo tại đây Hướng dẫn sử dụng JavaScript để lấy dữ liệu tìm nạp API từ ngân hàng Vương quốc Anh
Sử dụng đúng mã trạng thái HTTP
Nếu có điều gì xảy ra khi máy chủ đang xử lý một yêu cầu, bạn cần thiết lập đúng mã trạng thái trong phản hồi được trả về
6, if no error [thành công]OpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
7, if resource has been goneOpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
8, nếu yêu cầu không được thực hiện do máy khách bị lỗiOpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
9, nếu có lỗi ở phía API NodeJS [một ngoại lệ nào đó xảy ra,…]OpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
Nếu bạn sử dụng Express, việc thiết lập mã trạng thái khá dễ dàng.
OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
0Bạn có thể xem danh sách đầy đủ các mã trạng thái ở đây
Use HTTP header to send metadata
Để đính kèm các siêu dữ liệu vào tải trọng bạn sắp gửi, hãy sử dụng tiêu đề HTTP. Các tiêu đề sẽ bao gồm các thông tin
- Partition
- Tỷ lệ truy cập giới hạn
- Xác thực
This is an danh sách các tiêu đề HTTP đã được chuẩn hóa
Nếu bạn cần thiết lập bất kỳ tùy chỉnh siêu dữ liệu nào trong tiêu đề, vui lòng thêm tiền tố
OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
10 về phía trước. Ví dụ, nếu bạn đang sử dụng mã thông báo CSRF, cách thông thường [nhưng không chuẩn] là đặt tên kiểu OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
11. Tuy nhiên, theo RFC 6648 thì sẽ gây khó hiểu. Với các API mới không nên sử dụng các tiêu đề tên dễ gây xung đột với các ứng dụng khác. Ví dụ, OpenStack sẽ tự động thêm tiền tố vào tiêu đề với OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
12OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
Chú ý rằng các tiêu chuẩn HTTP không xác định được bất kỳ giới hạn kích thước nào trong tiêu đề. Tuy nhiên, NodeJS [từ lúc viết bài này] đã buộc tiêu đề đối tượng nhận một giới hạn kích thước là 80kB cho lý do thực tế
KHÔNG CHO PHÉP KÍCH THƯỚC TỔNG CỦA MỘT SỐ HTTP HEADER [BAO GỒM CÁC MÃ TRẠNG THÁI] VƯỢT QUÁ
13. ĐIỀU NÀY GIÚP BẢO VỆ CÁC EMBEDER KHỎI CÁC CUỘC TẤN CÔNG DDOS, KẺ TẤN CÔNG SẼ GỬI CÁC TÊN CHỦ LÀM TRÀN ĐỆMOpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
From
Select true framework for REST API NodeJS
Lựa chọn đúng khuôn khổ phù hợp với yêu cầu công việc của bạn là tối quan trọng. Sau đây là một số gợi ý
Express, Koa hay Hapi NodeJS
Express, Koa hay Hapi có thể được sử dụng để tạo ra các ứng dụng nền web, chúng hỗ trợ tạo khuôn mẫu và kết xuất. Nếu ứng dụng của bạn cần cung cấp dịch vụ cho người dùng, hãy thử sử dụng một số trong chúng và tận hưởng thành quả
phục hồi
Ở một khía cạnh khác, Restify file trung hoàn toàn vào việc giúp bạn xây dựng các dịch vụ REST NodeJS. Khôi phục tồn tại để giúp bạn xây dựng các dịch vụ API “chuẩn” đáng kể, dễ bảo trì. Restify cũng đi kèm với công cụ hỗ trợ tự động DTrace
Về mức độ phủ sóng thì Restify đang được sử dụng trong rất nhiều ứng dụng, điển hình như npm hay Netflix
Kiểm tra hộp đen REST API
Một trong những cách hay nhất để kiểm tra API REST là xem chúng như hộp đen
Black-box test là phương pháp kiểm tra chức năng của ứng dụng mà không cần quan tâm đến cấu trúc bên trong của nó hay cách nó hoạt động. Làm điều đó, sẽ không cần giả định bất kỳ sự phụ thuộc nào, hệ thống sẽ được kiểm tra như một thể duy nhất
Để giúp bạn kiểm tra API REST theo phương pháp hộp đen này, ta sẽ sử dụng mô-đun supertest
Sau đây là một trường hợp thử nghiệm đơn giản. Nó kiểm tra xem thông tin người dùng đã được trả về hay chưa, sử dụng thử nghiệm mocha
OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
1Có thể bạn sẽ thắc mắc. làm thế nào để biến dữ liệu vào trong cơ sở dữ liệu phục vụ cho các REST API NodeJS?
Thông thường, kiểm tra thường được viết làm sao để chúng tôi tạo ra càng ít giả định cho trang thái hệ thống càng tốt. Tuy nhiên, trong một vài bối cảnh bạn cần biết trạng thái chính xác của hệ thống, bạn có thể tạo các xác nhận và đạt được mức độ kiểm tra cao hơn
Tùy thuộc vào nhu cầu của bạn, bạn có thể phổ biến cơ sở dữ liệu với các bài kiểm tra dữ liệu theo một trong các cách sau
- Chạy kịch bản kiểm tra hộp đen theo một tập dữ liệu đã biết của quá trình sản xuất
- Cơ sở dữ liệu phổ biến với thủ công dữ liệu trước khi chạy các trường hợp thử nghiệm
Dĩ nhiên, kiểm tra hộp đen không đồng nghĩa với việc bạn không cần viết bài kiểm tra đơn vị. Trong hầu hết các trường hợp, bạn vẫn cần viết bài kiểm tra đơn vị cho các API
Tham khảo bài viết. Unit test là gì – Jest test Javascript cho người mới bắt đầu
JWT – Xác thực trạng thái phi
API must là phi trạng thái, do vậy xác nhận cũng tương tự. JWT [Json Web Token] chính là ý tưởng. JWT bao gồm 3 phần
- tiêu đề. bao gồm kiểu mã thông báo, thuật toán băm
- Khối hàng. Chứa các yêu cầu
- Chữ ký [JWT không mã hóa payload mà chỉ ký xác thực]
Thêm xác thực loại JWT vào ứng dụng khá đơn giản và nhanh chóng
OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
7Sau khi thêm vào, API NodeJS điểm cuối đã được bảo vệ bởi JWT. Để truy cập vào các điểm cuối đã được bảo vệ, bạn cần phải cung cấp mã thông báo trong trường tiêu đề
OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
14OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
9Xin lưu ý một điều rằng mô-đun JWT không phụ thuộc vào bất kỳ cơ sở dữ liệu lớp nào, tất cả mã thông báo JWT đều có cơ chế xác thực tự động và chúng tôi vẫn bao gồm cả giá trị thời gian sống
Ngoài ra, bạn phải luôn đảm bảo rằng tất cả các điểm cuối API trong ứng dụng sẽ chỉ được truy cập thông qua kết nối bảo mật sử dụng HTTPS
Sử dụng các yêu cầu có điều kiện
Các yêu cầu có điều kiện là các yêu cầu HTTP được thực thi theo các cách khác nhau, phụ thuộc vào tiêu đề HTTP cụ thể. bạn có thể xem các tiêu đề này như một điều kiện quyết định. if they met nhau, các yêu cầu sẽ được thực hiện theo các cách khác nhau
Các tiêu đề này sẽ cố gắng kiểm tra xem liệu phiên bản tài nguyên được lưu trữ trên máy chủ có trùng với phiên bản của cùng một tài nguyên hay không. Vì lý do này, các tiêu đề có thể là
- Dấu thời gian của lần thay đổi gần nhất
- One tag nào đấy, other options on the version
We main are
15 [để chỉ ra lần gần nhất dữ liệu được chỉnh sửa ]OpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
16 [ to only ra tag ]OpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
17 [sử dụng với tiêu đềOpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
15 ]OpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
19 [sử dụng với tiêu đềOpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
16 ]OpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
Vui lòng xem qua ví dụ dưới đây để hiểu thêm
Ở hình dưới đây, khách hàng đã không có bất kỳ phiên bản cũ nào của tài nguyên
OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
71. Do đó cả 2 tiêu đề OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
17 hướng OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
19 đều không được sử dụng khi tài nguyên được gửi đi. Sau đó, máy chủ phản hồi với các tiêu đề OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
16 và OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
15 được thiết lập đúngMáy khách có thể thiết lập tiêu đề
OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
17 và OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
19 một lần khi nó cố gửi yêu cầu với cùng tài nguyên. Nếu phản hồi trả về giống nhau, máy chủ chỉ đơn giản là phản hồi lại với mã trạng thái OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
78 và không gửi lại tài nguyên nữaYêu cầu giới hạn số lượng – giới hạn tốc độ
Giới hạn tỷ lệ được sử dụng để điều khiển việc người dùng có thể gửi đến API bao nhiêu yêu cầu
Để nói với API có bao nhiêu yêu cầu đã được gửi đi, trong tiêu đề hãy thiết lập như sau
79. number of request are allow in a interval for beforeOpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
90. số lượng yêu cầu còn lại trong cùng một khoảng thời gian. number of request cong back in the same time intervalOpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
91. time that rate limit is settingOpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy
Hỗ trợ phần lớn HTTP framework bằng các công cụ bên ngoài hoặc là các plugin. Ví dụ, nếu bạn sử dụng Koa, hãy thử gói koa-ratelimit
Chú ý rằng cửa sổ thời gian có thể thay đổi tùy chọn vào các nhà cung cấp API khác nhau – ví dụ như Github là 1 giờ, trong khi Twitter là 15 phút
Tạo tài liệu API NodeJS đúng chuẩn
Các API được viết ra để mọi người có thể sử dụng chúng, hưởng lợi từ chúng. Do đó việc cung cấp các tài liệu đi kèm với API REST là điều kiện tối thiểu cần thiết
Các dự án mã nguồn mở sau đây có thể giúp bạn tạo ra các tài liệu cho API
- Bản thiết kế API
- Đi vênh vang
Nếu bạn muốn sử dụng sản phẩm đã lưu trữ, bạn có thể sử dụng Apiary
Đừng quên tương lai sáng lạn của API NodeJS
Trong vài năm vừa qua, hai ngôn ngữ truy vấn lớn cho các API đã mọc lên. GraphQL của Facebook và Falcor của Netflix. Tại sao ta lại cần họ đến thế nào?
Tưởng tượng yêu cầu tài nguyên RESTful NodeJS as after
/org/1/space/2/docs/1/collaborators?include=email&page=1&limit=10
Yêu cầu này có thể trở nên thông qua tầm nhìn kiểm tra giám sát của họ khá dễ dàng – trong trường hợp bạn muốn lấy phản hồi cùng định dạng cho tất cả các mô hình vào mọi thời điểm. Lúc này thì GraphQL và Falcor sẽ giúp bạn
GraphQL
“Là một ngôn ngữ truy vấn cho các API NodeJS và là một thời gian chạy để hoàn thành các truy vấn đó. GraphQL cung cấp một mô tả hoàn chỉnh và dễ hiểu về dữ liệu trong các API, cho phép khách hàng mạnh mẽ yêu cầu khách hàng chính xác cần thiết, và khách hàng thứ chỉ cần, không hơn. GraphQL khá dễ dàng để phát triển các API theo thời gian, kích hoạt các công cụ phát triển mạnh mẽ. Xem thêm tại đây. ”
chim ưng
“Falcor là nền tảng dữ liệu tiên tiến giúp tối ưu sức mạnh cho giao diện người dùng Netflix. Nó cho phép bạn lập mô hình back-end tất cả dữ liệu như một đối tượng JSON ảo độc lập trên máy chủ NodeJS. Ở phía client, bạn sẽ làm việc với đối tượng JSON từ xa, sử dụng các thuật toán Javascript quen thuộc như get, set và call. Nếu bạn hiểu dữ liệu, bạn đã hiểu các API. Xem thêm tại đây. ”