Đăng api nodejs

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
1

Cá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

  • OpenStack-Identity-Account-ID
    OpenStack-Networking-Host-Name
    OpenStack-Object-Storage-Policy
    0 hay 
    OpenStack-Identity-Account-ID
    OpenStack-Networking-Host-Name
    OpenStack-Object-Storage-Policy
    1 để tạo người dùng mới
  • OpenStack-Identity-Account-ID
    OpenStack-Networking-Host-Name
    OpenStack-Object-Storage-Policy
    2 để lấy danh sách người dùng
  • OpenStack-Identity-Account-ID
    OpenStack-Networking-Host-Name
    OpenStack-Object-Storage-Policy
    3 để lấy thông tin của một người dùng
  • OpenStack-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ùng

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ề

  • OpenStack-Identity-Account-ID
    OpenStack-Networking-Host-Name
    OpenStack-Object-Storage-Policy
    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 gone
  • OpenStack-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ỗi
  • OpenStack-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,…)

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
0

Bạ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
12

OpenStack-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Á 

OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
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 ĐỆM

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
1

Có 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
7

Sau 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
14

OpenStack-Identity-Account-ID
OpenStack-Networking-Host-Name
OpenStack-Object-Storage-Policy
9

Xin 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

  • OpenStack-Identity-Account-ID
    OpenStack-Networking-Host-Name
    OpenStack-Object-Storage-Policy
    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 )

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 đúng

Đăng api nodejs
Yêu cầu từ tài liệu có điều kiện MDN

Má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ữa

Đăng api nodejs
Yêu cầu từ tài liệu có điều kiện MDN

Yê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

  • OpenStack-Identity-Account-ID
    OpenStack-Networking-Host-Name
    OpenStack-Object-Storage-Policy
    79. number of request are allow in a interval for before
  • OpenStack-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 interval
  • OpenStack-Identity-Account-ID
    OpenStack-Networking-Host-Name
    OpenStack-Object-Storage-Policy
    91. time that rate limit is setting

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. ”