REST APIs cung cấp giải pháp kết nối các ứng dụng với nhau một cách gọn nhẹ, linh hoạt và đang dần trở thành một chức năng thông dụng bậc nhất để liên kết các thành phần trong kiến trúc hệ thống microservices. Vì thế trong bài viết này, WorkLabs CodingSchool sẽ giới thiệu đến bạn những kiến thức căn bản về REST API. Có thể có những điều bạn đã biết, vậy hãy cùng review lại kiến thức với chúng mình nhé!

REST API là gì? 

Để nắm những thông tin về REST API, trước hết chúng ta cần hiểu API là gì. API – Application Programming Interface là một bộ nguyên tắc xác định cách thức các ứng dụng và thiết bị kết nối, liên lạc với nhau. REST API là một API được thiết kế theo nguyên tắc của REST – Representational state transfer architectural style – kiểu cấu trúc “Chuyển trạng thái trình bày”. REST tập trung vào việc truy cập các tài nguyên được đặt tên thông qua một giao diện duy nhất. Thay vì sử dụng XML để tạo request, REST dựa vào một URL đơn giản. REST API là cách viết ngắn gọn của RESTful API.

REST API lần đầu được tiến sĩ Roy Fielding giới thiệu trong bài bảo vệ luận văn tiến sĩ của ông vào năm 2000, mang đến cho lập trình viên sự tự do và uyển chuyển khi thiết kế API. Chính điều này đã giúp nó trở thành một trong những phương thức thiết kế thông dụng nhất để kết nối các thiết bị và ứng dụng lại với nhau trong kiến trúc microservices.

Nguyên tắc thiết REST API 

Ở mức độ đơn giản nhất, API tạo một cơ chế để các ứng dụng hay service có thể truy vấn hoặc trao đổi resource từ các ứng dụng hay service khác. Các ứng dụng hay service đang sử dụng API được gọi là client, ứng dụng và service chứa các resource được gọi là server.

Một số API như SOAP hay XML-RPC có một framework riêng và bắt buộc các lập trình viên cần phải thiết kế theo đó. Tuy nhiên, các REST API có thể được xây dựng bằng hầu hết các ngôn ngữ lập trình đồng thời được hỗ trợ để xử lý nhiều loại định dạng dữ liệu. Mặc dù vậy, khi thiết kế REST API chúng ta cần lưu ý thực hiện 6 yêu cầu căn bản dưới đây:

1. Uniform interface

Tất cả các API request dùng cho một resource cần phải giống nhau, không cần biết là request đó bắt nguồn từ đâu. Trong một REST API, loại dữ liệu như tên và email của một người dùng, cần được đảm bảo chỉ thuộc duy nhất một Uniform Resource Indentifider (URI). Kích thước của một resource không nên quá lớn, tuy nhiên cũng cần đảm bảo các thông tin đáp ứng nhu cầu của client.

2. Client-server decoupling

Trong thiết kế REST APO, client và server cần đứng hoàn toàn độc lập với nhau. Thông tin duy nhất client cần biết đó là URI của một resource mà request đó yêu cầu, và đây cũng là cách duy nhất để client giao tiếp với các ứng dụng từ server. Tương tự như vậy, các ứng dụng của server không được thay đổi bất cứ các ứng dụng trên client, ngoài trừ việc gửi request thông qua HTTP.

Trong thiết kế REST API, client và server cần đứng hoàn toàn độc lập với nhau. Thông tin duy nhất client cần biết đó là URI của một resource mà request đó yêu cầu, và đây cũng là cách duy nhất để client giao tiếp với các ứng dụng từ server. Tương tự như vậy, các ứng dụng của server không được thay đổi bất cứ các ứng dụng trên client, ngoài trừ việc gửi request thông qua HTTP. 

3. Statelessness  

Các REST API là statelessness, có nghĩa là các request cần chứa đựng đầy đủ thông tin để có thể gọi API này. Cũng có nghĩa là một REST API vận hành sẽ không cần mở một phiên làm việc nào của server. Server không được lưu trữ bất kỳ thông tin nào trong request của một client.

4. Cacheabilit

Các resource nên được cacheable trên client hoặc server. Vì vậy, khi các thông tin phản hồi do server trả về cần chỉ rõ là thông tin nào được cho phép caching. Mục tiêu của việc làm này là gia tăng tốc độ phục cụ cho client, đồng thời đảm bảo được độ ổn định nhất định cho server.

5. Layered system architecture 

Trong các REST API, cá truy xuất và thông tin trả về sẽ đi qua những lớp khác nhau. Do đó, chúng ta đừng nên giả định rằng các ứng dụng của client và server liên kết với nhau một cách trực tiếp. Vì bên trong vòng liên kết này sẽ tồn tại các cầu nối trung gian. Việc thiết kế REST API cần phải làm sao cho cả client và server không nhận biết được là nó đang liên hệ với một ứng dụng cuối cùng hay là một cầu nối trung gian.

6. Code on demand (tùy chọn) 

REST API thường gửi trả những resource ở dạng tĩnh, nhưng trong một số trường hợp nó có thể là một câu lệnh như Java apples. Trong trường hợp này, những câu lệnh này được vận hành theo một yêu cầu cụ thể.

REST API hoạt động như thế nào? 

REST API giao tiếp qua các HTTP request để thực hiện các chức năng (CRUD) của một cơ sở dữ liệu như khởi tạo – creating, truy xuất – reading, cập nhật – updating và xóa bỏ – deleting dữ liệu. Ví dụ như REST API sử dụng GET request để truy vấn một dữ kiện. POST request để khởi tạo một dữ kiện. PUT request để cập nhật lại dữ kiện hiện có, và DELETE request sẽ xóa dữ kiện đó. Tất cả các chức năng của HTTP đều có thể được sử dụng thông qua các lần gọi API. Một REST API được thiết kế chỉnh chu sẽ giống như một trang web chạy trên một trình duyệt web với tính năng HTTP tích hợp sẵn.

Giai đoạn của một resource tại một thời điểm cụ thể (instant hay timestamp) được biết đến như một hình thức thể hiện của resource đó. Thông tin này có thể được chuyển tới các client với các định dạng khác nhau như JavaScript Object (JSON), HTML, XLT, Python, PHP, hay plain text. JSON là định dạng phổ biến nhất bởi cách trình bày dễ dàng đọc được bằng mắt thường và máy tính.

Các reuqest header và parameter rất quan trọng trong khi gọi REST API bởi vì chúng chứa đựng những thông tin quan trọng để định danh. Ví dụ như metadata, authorizations, uniform resource identifiers (URIs), caching, cookies và nhiều thức khác nữa. Các request header và response header, cùng với các HTTP status code thông dụng sẽ thường được xây dựng trong các thiết kế REST API chỉnh chu.

REST API ứng dụng phổ biến nhất 

Thế mạnh của thiết kế REST API đó là sự linh hoạt của nó, tuy nhiên cũng chính yếu tố này là nguyên nhân có rất nhiều API sau khi thiết kế xong không thể vận hành hay vận hành không mượt mà. Vì vậy, nhiều nhóm các chuyên gia đã cùng nhau chia sẻ những thiết kế tối ưu để chúng ta học hỏi nhanh hơn.

OpenAPI Specification (OAS) tạo nên một giao diện để trình bày các API. Ở đó, các lập trình viên và các ứng dụng có thể quan sát các API này. Từ đó, họ có thể nắm bắt được những thông số kỹ thuật và mục tiêu của API. Các thông tin đó có thể là các endpoint, các chức năng có thể được sử dụng tại mỗi endpont, các thông số hệ thống hay các phương pháp định danh. Phiên bản mới nhất của OAS là OAS3 được hỗ trợ thêm các công cụ để tăng khả năng tương tác. Như OpenAPI Generator với khả năng tạo ra các API clients và các server giả lập cho các ngôn ngữ lập trình khác nhau.

Phương thức bảo mật một REST API được tổng hợp và xây dựng từ những thực nghiệm nổi bật trong ngành. Đó có thể là những phương pháp Hashing cho các thông tin bảo mật, hay HTTPS cho việc truyền tải thông tin an toàn. Cụ thể hơn là sử dụng OAuth 2.0 – một framework về định danh, nó giúp giới hạn các đặc quyền của những ứng dụng của bên thứ ba. Thêm vào đó, áo dụng timestamp vào header của HTTP, giúp cho một API có thể từ chối bất kỳ request nào đến sau một điểm thời gian định sẵn nhất định. Sử dụng các bước tuyển chọn thông số và JASON Web token là một cách khác để đảm bảo chỉ có những client được cấp quyền mới có thể truy cập vào API.

Vậy là chúng ta đã cùng nhau điểm qua những nội dung căn bản về REST API cũng như cách thiết kế chúng. Hãy sử dụng ngôn ngữ lập trình bạn yêu thích và thiết kế thử một REST API cùng WorkLabs CodingSchool nhé. Happy Coding </>