12/08/2018, 16:59

10 cách để viết Nodejs REST APIs hiệu quả

Chúng ta sẽ cùng tìm hiểu các cách để viết các REST API với nodejs làm sao cho hiệu quả, bao gồm các chủ đề như đặt tên các route, authentication, black-box testing và sử dụng cache header đúng cách các tài nguyên. Hy vọng 10 cách được liệt kê dưới đây có thể giúp ích cho các bạn: 1. Sử dụng ...

Chúng ta sẽ cùng tìm hiểu các cách để viết các REST API với nodejs làm sao cho hiệu quả, bao gồm các chủ đề như đặt tên các route, authentication, black-box testing và sử dụng cache header đúng cách các tài nguyên. Hy vọng 10 cách được liệt kê dưới đây có thể giúp ích cho các bạn:

1. Sử dụng phương thức HTTP và các API Route

Giả sử bạn đang xây dựng một RESTful API Node.js để tạo, cập nhật, lấy thông tin hay 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: POST, PUT, GET, PATCH hoặc DELETE.

Cách tối ưu nhất là các API route của bạn chỉ nên sử dụng danh từ cho việc xác định tài nguyên. Các route khi đó sẽ trông như thế này:

  • POST /user dùng để tạo user
  • GET /user lấy danh sách users
  • GET /user/:id lấy một user cụ thể bằng id
  • PUT /user:/id thay đổi/cập nhật thông tin user cụ thể thông qua id
  • DELETE /user/:id để xóa một user.

2. Sử dụng HTTP status code chính xác

Nếu có gì xảy ra khi server đang xử lý một request, bạn cần tạo http status code trong response trả về:

  • 2xx, nếu không có lỗi (thường là 200).
  • 3xx, nếu resourse đã chuyển
  • 4xx, nếu request không được thực hiện do lỗi client.
  • 5xx, nếu có lỗi ở phía API server (một exception nào đó xảy ra,...).

Nếu bạn sử dụng Express, thiết lập mã status khá dễ dàng: res.status(500).send({error: 'Internal server error happened'}). Thường thì ta nên tạo một helper để khai báo các định dạng và status code trả về để tiện dùng sau này trong app.

3. Sử dụng các header HTTP để gửi metadata

Để đính kèm các metadata vào payload bạn sắp gửi, sử dụng HTTP header. Các header sẽ bao gồm các thông tin:

  • phân trang
  • giới hạn tần suất
  • hoặc authentication

Nếu bạn cần thiết lập bất cứ metadata custom nào trong header, hãy thêm tiền tố X vào phía trước. Ví dụ, nếu bạn đang sử dụng CSRF token, cách thông thường là X-Csrf-Token. 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 tên header dễ gây conflict với các ứng dụng khác. Ví dụ, OpenStack sẽ tự động thêm tiền tố vào header với OpenStack:

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

Chú ý rằng các chuẩn HTTP không định nghĩa bất cứ giới hạn size nào trong header. Tuy nhiên Node.js đã buộc object header nhận một giới hạn kích thước là 80kB cho lý do thực tế từ Nodejs HTTP parser.

Don’t allow the total size of the HTTP headers (including the status line) to exceed HTTP_MAX_HEADER_SIZE. This check is here to protect embedders against denial-of-service attacks where the attacker feeds us a never-ending header that the embedder keeps buffering

4: Chọn đúng framework cho REST API Node.js

Việc chọn đúng framework phù hợp với yêu cầu công việc của bạn là quan trọng. Một số framework phổ biến như: Express, Koa hay Hapi Express, Koa hay Hapi có thể được sử dụng để tạo ra các web application, chúng hỗ trợ templating và rendering. Mình thì bắt đầu với Express             </div>
            
            <div class=

0