Chúng ta thường nghe về REST và RESTful API trong phát triển ứng dụng Web, nhất là khi viết ứng dụng trải dài từ Web server tới Mobile app. Tuy vậy nhưng bản thân REST lại không phải là tên 1 kỹ thuật, mà gần với 1 bộ các quy tắc dùng để tạo ra các API hơn.
REST và RESTful API
REST là viết tắt của REpresentational State Transfer. REST là tập hợp các hướng dẫn và kiến trúc sử dụng cho việc truyền dữ liệu. REST áp dụng phổ biến cho các Web app, nhưng cũng hoàn toàn có thể sử dụng cho các phần mềm nói chung.
Vì thế RESTful API là các API mà tuân theo các kiến trúc và quy tắc của REST.
Kiến trúc REST
Kiến trúc REST có 1 số đặc điểm như sau
- Nhất quán xuyên suốt các API. Ví dụ: luôn luôn sử dụng danh từ số nhiều thay vì khi số nhiều, khi số ít
- Tồn tại mà không lưu trạng thái (Stateless existence), ví dụ như không sử dụng session của server. Đây chính là lý do vì sao lại có cụm State Transfer (ST) trong REST. Tính chất này đảm bảo rằng mỗi khi client submit 1 request, request ấy sẽ bao gồm toàn bộ các thông tin mà server cần để xử lý request. Đây là điều cần thiết để build 1 ứng dụng phục vụ lên tới hàng triệu user.
- Sử dụng HTTP status code khi có thể
- Sử dụng URL Endpoint có phân tầng logic
- Đánh version trong URL thay vì trong HTTP Headers
“API là UI đối với developer“, vậy nên API cần được thiết kế sao cho dễ sử dụng và tạo được trải nghiệm tốt. RESTful API là các API được thiết kế với mục đích như vậy
Các điểm cần lưu ý về API
Phương thức truy cập
Đối với các Web app, ta có 4 phương thức được sử dụng để truy cập RESTful API
- GET để lấy về 1 đối tượng
- POST để tạo ra đối tượng mới
- PUT để sửa đổi hoặc thay thế đối tượng
- DELETE để xoá đi đối tượng
Các phương thức trên sẽ được truyền lên server thông qua API call. Hầu hết các hệ thống để chỉ cho phép sử dụng GET request để lấy dữ liệu từ server.
Authentication
Authentication thì mặc định là không bắt buộc, nhưng bạn nên cài đặt đối với các request liên quan tới POST/PUT/DELETE. Đối với 1 số dịch vụ nhiều người dùng như Twitter, họ bắt buộc authentication đối với tất cả các endpoint để tránh việc sử dụng sai mục đích.
Return type
Dữ liệu trả về (return type) thường là kiểu JSON. Ngoài ra XML cũng là 1 lựa chọn không tệ.
Danh từ và Động từ
RESTful API sử dụng danh từ cho đối tượng, và động từ cho các hành động. Ví dụ như Flickr
- flickr.photos.addTags –> Thêm tag vào bức ảnh
- flickr.photos.comments.addComment –> Thêm comment vào bức ảnh
API Rate Limit
Là giới hạn số lần request tới API server. Số lần giới hạn này có thể được tính trên user, application hoặc cụ thể hơn là trên 1 token. Mục đích của con số này nhằm để hạn chế việc lạm dụng API, hoặc 1 hướng khác là nhằm thu phí sử dụng dịch vụ. Ví dụ như Google Maps API, hoàn toàn free nhưng nếu bạn muốn request nhiều hơn thì cần trả thêm tiền.
URL Endpoint
URL Endpoint là URL để client gửi request lên server. Thông thường endpoint sẽ đánh version bằng những cụm như /v2/ hoặc /2.0/. Ví dụ như API search của Twitter có dạng: https://api.twitter.com/1.1/search/tweets.json?q=%40twitterapi. Bạn cần lưu ý rằng với cùng 1 endpoint, nếu phương thức request (GET/DELETE..) khác nhau vẫn có thể trả về các kết quả khác nhau.
Bắt đầu
Để bắt đầu với API, bạn có thể tự trải nghiệm với API của 1 số website nổi tiếng sau
Tự viết API
Nếu muốn tự viết 1 API của riêng mình, bạn có thể tham khảo 1 số tài liệu dưới đây
Bài viết có tham khảo Hongkiat