Services communicate và khái niệm REST API
- 27-04-2022
- Toanngo92
- 0 Comments
Mục lục
Giới thiệu về REST API
REST là một kiến trúc phi trạng thái (stateless architechture), REST được sử dụng để xây dựng một ứng dụng giao tiếp thông qua hệ thống mạng, được phát minh và giới thiệu năm 2000, cung cấp giao thức giúp giao tiếp giữa phía máy khách và máy chủ. Trong hầu hết các trường hợp, kiến trúc này sử dụng giao thức có tên hypertext Transfer Protocol (HTTP) để giao tiếp giữa các thiết bị.
Trước khi kiến trúc REST được giới thiệu, lập trình viên sử dụng các kiến trúc giao tiếp phức tạp có khái niệm cơ bản như:
- Simple Object Access Protocol (dịch nôm na là giao thức truy cập đối tượng cơ bản) viết tắt là SOAP. Xem thêm tại đây
- Remote Procedure Call ( gọi thủ tục từ xa) viết tắt là RPC. Xem thêm tại đây
- Common Object Request Broker Archittechture (Kiến trúc môi giới yêu cầu) viết tắt là COBRA. Xem thêm tại đây
Chúng ta tạm hiểu REST là một kiến trúc gọn nhẹ sử dụng cho dịch vụ web. Với nhiều góc nhìn khác nhau, WWW (world wide web) dựa trên giao thức http đã mang trong mình kiến trúc dựa trên REST. REST thực sự tối ưu cho internet khi các ứng dụng sử dụng giao thức http vẫn phổ biến và mạnh mẽ. (Nếu bạn chưa hiểu hãy hình dung khi bạn gõ tên miền web888.vn trên trình duyệt, trình duyệt sẽ tự động thêm http:// hoặc https:// đằng trước chuỗi tên miền, ngoài ra một số website thêm http://www.tenmien.com, điều này có nghĩa trình duyệt đặt giao thức http làm mặc định khi truy cập ứng dụng web )
REST đáp lại yêu cầu phía máy khách trên 4 hoạt động có tên khái niệm là Create,Read,Update,Delete (CRUD). Một ứng dụng RESTful gửi các request (yêu cầu) HTTP sử dụng để đọc, thêm mới, cập nhật hay xóa dữ liệu. Tóm lại REST cung cấp một kiến trúc dễ hieuer để chúng ta có thể thao tác và tùy chỉnh, dữ liệu theo ý muốn và được cung cấp như một tính năng thư viện chuẩn trong các ngôn ngữ như C#,Java,Perl ..
Mặc dù kiến trúc REST này khá toàn diện, nói cách khác, nó cung cấp đầy đủ tính năng, có thể gọi là làm mọi thứ nhưng những thứ này có thể làm thông qua thứ gọi là Web services ( dịch vụ web), REST không được W3C recommend, và không phải là cơ chế mặc định
REST Principles (Nguyên lý REST)
REST mang phong cách là định nghĩa một tập hợp các ràng buộc được sử dụng để tạo ra một kiến trúc thường dùng, các ràng buộc này là các nguyên tắc hoặc đặc tính, làm nên sự khác biệt dữa kiến trúc REST với các kiến trúc khác
- Client-server communication: hiểu cơ bản là chia ra 2 tầng máy khách và máy chủ là 2 thành phần rieneg biệt, ứng dụng RESTful đảm bảo chúng hoạt động và giúp client (máy khách) có thể giao tiếp với server (máy chủ)
- Statelessnessness: thông tin trạng thái client không được lưu trên server. nói theo cách khác, mỗi yêu cầu phía máy khách sẽ bao gồm toàn bộ các thông tin cần thiết, server nhận thông tin và thực hiện tác vụ. Nó cho phép server hiểu các tác vụ phía máy khách, trạng thái mỗi phiên giao tiếp, và dữ liệu trả về cho máy khách cũng bao gồm thông tin phiên giao tiếp cho mỗi lần request (truy vấn). Stelessness giúp cung cấp cơ chế chặt chẽ để giao tiếp giữa server với client để đạt được mục đích tác vụ
- Cacheablility: máy khách có thể lưu trữ tạm các dữ liệu trả về, và mô tả cho chính nó dữ liệu có thể lưu trữ tạm(cacheable) hay không, nếu có, dữ liệu sẽ được sử dụng lại cho lần phản hồi tiếp theo giúp tăng thời gian phản hồi
- Uniform Interface: Một giao diện mẫu chuẩn giúp dễ dàng tương tác với toàn bộ các thành phần, nó giúp đơn giản hóa việc tương tác với các services khác nhau. Nó cũng giúp đảm bảo rằng những sữ thay đổi khi phát triển sẽ không ảnh hưởng tới thành phần khác trong ứng dụng, mặt trái của nó là không thể sửa đổi quy chuẩn này.
- Layered system: một trung gian , như proxy, có thể ngắt giao tiếp giữa máy khách và máy chủ với mục đích cụ thể như bảo mật (security), cân bằng tải (load balancing), hoặc lưu trữ tạm (caching). Và máy khách sẽ không thể phân biệt mình đang giao tiếp với máy chủ hay trung gian
- Code on demand: đây là một ràng buộc tùy ý, trong đó máy chủ mở rộng tạm thời chức năng của máy khách bằng cách cho phép nó tải xuống chương trình, các chương trình này sau đó thực thi trên máy khách. Ví dụ: một máy khách có thể chạy mã javascript để tương tác với một dịch vụ khác chạy trên nó
So sánh REST và SOAP
Nhiều lập trình viên ( bao gồm cả mình) đều hỏi tại sao REST thích hợp hơn SOAP thật sự rất khó cho người mới vì thời điểm hiện tại thật sự ít khi chúng ta được tiếp cận SOAP . Đầu tiên, là thực tế không thể so sánh trực tiếp REST và SOAP, lí do vì SOAP là một giao thức, còn REST là một kiểu kiến trúc.
Tuy nhiên, các điểm trính giúp chúng ta có thể đánh giá giữa SOAP và REST như sau:
Điểm khác biệt | SOAP | REST |
Mức độ kết hợp giữa triển khai máy khách và máy chủ | Gắn chặt với máy chủ, ví dụ như là một ứng dụng máy tính tùy chỉnh, một hợp đồng chặt chẽ (rigid contract), có thể hiểu như sự ràng buộc, tồn tại giữa máy khách và máy chủ, nếu một chong số chúng thay đổi, mọi thứ trong quá trìng giao tiếp sẽ bị phá vỡ | Cơ chế kết hợp lỏng lẻo ví dụ như là trình duyệt, một máy khách REST là một ứng dụng khách sử dụng chung các phương thức theo chuẩn hóa và giao thức mà ứng dụng thích ứng cho phù hợp. Không có phương thức bổ sung nào được định nghĩa để vi phạm các tiêu chuẩn giao thức. các thay đổi được xử lý dễ dàng hơn hơn |
Định hướng | Đối tượng | Tài nguyên |
Kích thước | Nặng | Nhẹ |
Trạng thái | Stateful | Stateless |
Tiêu chuẩn | Tiêu chuẩn dữ liệu rõ ràng | Tiêu chuẩn dữ liệu không rõ ràng |
tốc độ | Chậm hơn và tốn nhiều tài nguyên, băng thông cho mỗi lần giao tiếp | Nhanh hơn, do tốn ít băng thông, tài nguyên hơn |
Chuẩn giao tiếp | eXtensible Markup Language (XML) | Sử dụng các thông báo điều khiển ( message control) để bieuer diễn với nhều cấấu trúc dữ liệu hiện đại như XML,plain text,JSON |
triển khai (implimentation) | Phức tạp (khó) hơn | Dễ dàng hơn |
Client | Cần hiểu toàn bộ kiến thức về những kiến trúc dữ liệu đang sử dụng trước khi tương tác | Không cần có kiến thức về API, ngoại trừ đường dẫn giao tiếp (entry point) và kiểu dữ liệu trả về |
Tài nguyên (resources) trong RESTful Web Services
Một RESTful Web Service là một nghiệp vụ(dịch vụ) giao tiếp trong công nghệ web mà phát triển từ kiến trúc REST API. Nó đã định nghĩa sẵn URI (Uniform Resource Identifier), tham chiếu tới các nghiệp vụ để ra chỉ thị cho các phương thức HTTP.
Trong RESTful API, mọi vấn đề nằm xung quanh khái niệm (resource) có thể dịch là tài nguyên, chúng ta có thể hiểu như sau: mỗi khi chúng ta thực hiện chỉ thị các phương thức api, chúng ta làm việc với resource, nó có thể là một tà liệu, hình ảnh, file, trang web …. Một resource có một kiểu ( có thể hình dung gần giống dữ liệu) chứa các dữ lieuej bên trong, và nó có một tapaj hợp các phương thức để thao tác liên quan với nó, và có thể có mối quan hệ với tài nguyên (resource) khác.
Resource trong REST tương đương với khái niệm object (đối tượng) trong các ngôn ngữ lập trình hướng đối tượng, chẳng hạn với bài toán quản lý sinh viên, thêm sửa xóa kinh điển bằng ngôn ngữ lập trình C, mỗi một biến biểu diễn cấu trúc dữ liệu sinh viên ( bao gồm tên, tuổi, điểm), trong các các ngôn ngữ lập trình hiện đại với cú pháp phong cách mới, đó chính là một đối tượng. Và để thêm sửa xóa chúng, REST cung cấp một số phương thức cơ bản với khái niệm CRUD để chúng ta tiếp cận. Tuy nhiên, trong thực tế, chúng ta có thể sử dụng nhiều phương thức hơn, nhưng thông thường 4 phương thức dưới là vừa và đủ để đủ sử dụng:
- POST (Create): khởi tạo tài nguyên mới hoặc trong một số tình huống cũng có thể sử dụng để cập nhật một tài nguyên sẵn có
- GET:(Read) lấy một tài nguyên chỉ đọc (read only), thông thờng dử dụng để lấy đối tượng, hay một danh sach đối tượng
- PUT:(Update) cập nhật tài nguyên sẵn có
- DELETE: (Delete) xóa tài nguyên
Tài nguyên (Resource) hoàn toàn có thể nhóm thành một danh sách, mỗi một danh sách cũng là một tài nguyên (Resource), có thể hiểu như vậy, danh sách này có thể chưa được sắp xếp và có sự đồng nhất,chuẩn hoá về cấu trúc dữ liệu và chúng ta có thể sử dụng dữ liệu đó để tiếp tục xử lý bằng ngôn ngữ lập trình như phân tích thành mảng, chuẩn hóa thành kiểu dữ liệu nguyên thủy, hiển thị giao diện cho người dùng ….
Một máy chủ REST cho phép truy cập tài nguyên và máy khách biểu diễn chúng, mỗi tài nguyên (resource) có một định danh riêng biệt dựa theo chuẩn của URI (thông thường là tham số, slug – một phần tử của đường dẫn truyền vào trên đường dẫn). Ví dụ một api endpoint như hình để biểu diễn một endpoint làm việc với resource quản lý các công việc(có thể hiểu là đối tượng):
Để biểu diễn resource, REST hỗ trợ nhiều kiểu cấu trúc dữ liệu từ chặt chẽ(XML) đến hiện đại(JSON), hay chỉ đơn thuần là văn bản (PLAINTEXT). Thời điểm hiện tại và trong tương lai gần JSON vẫn là phổ biến nhất khi sử dụng web services.
HTTP Messages
Chúng ta có thể hiểu HTTP Messages là thông báo phản hồi khi giao tiếp HTTP, RESTful Web service dựa vào HTTP để khởi tạo các giao tiếp hoặc đưa ra thông báo khi máy khách giao tiếp với máy chủ. Trong khi xử lý thông báo, máy khách gửi HTTP Request lên máy chủ, máy chủ trả về cho máy khách một gói tin gọi là HTTP Response, request và response message chứa các nội dung thông báo(tin nhắn) với thông tin về dữ liệu, gọi là metadata. Cấu trúc như sau:
Cấu trúc HTTP Request
- Verb: biểu diễn phương thức HTTP như là GET,DELETE,PUT,POST
- URI: có thể tạm hiểu như đường dẫn đích, xác định tài nguyên mong muốn làm việc trên máy chủ
- HTTP Version: biểu diễn phiên bản của HTTP (ví dụ v1.1)
- Request Header: chứa các metadata của tập tin, với các cặp giá trị theo chuẩn key-value. Ví dụ, metadata đưa thêm vào request thông tin trình duyệt, cấu hình cache, định dạng cho message body.
- Request Body: chứa dữ liệu tin nhắn ở định dạng thích hợp
Cấu trúc HTTP Response
- HTTP Version: biểu diễn phiên bản của HTTP (ví dụ v1.1)
- Respon code: 3 ký tự số chỉ ra trạng thái của tài nguyên được request tới. Ví dụ 200 là ok, 404 là tài nguyên không tìm thấy
- Response Header: có các metadata với thông báo phản hồi với các cặp giá trị theo chuẩn key-value, Ví dụ thẻ metadata có thể bao gồm thêm content length, response date, server type, content type
- Response Body: chứa các dữ liệu tập tin với các định dạng phù hợp
Hình ảnh ví dụ về request header,
Response Code | Thông báo | Mô tả |
200 | OK | Thành công |
201 | Created | Chỉ ra rằng tài nguyên mong muốn đã được tạo hoặc cập nhật thành công thông qua phương thức PUT hoặc POST, và trả về kết nối tới nó thông qua location header |
204 | No Content | Xuất hiện khi response body trắng. Ví dụ, code này sẽ được hiển thị khi request DELETE được thực thi thành công |
304 | Not Modified | Sử dụng cho giảm mức sử dụng băng thông nếu có các yêu cầu GET có điều kiện, nội dung phản hồi trống và tiêu đề có metadata như vị trí và ngày tháng |
400 | Bad Request | Chỉ ra rằng phía máy khách đưa dữ có dữ liệu không hợp lệ được đưa ra trong yêu cầu. Ví dụ: nó có thể bị thiếu dữ liệu hoặc tham số không phù hợp |
401 | Unauthorized | Chỉ ra rằng máy khách không được phép truy cập ( chưa được xác thực) |
403 | Forbidden | Chỉ ra rằng máy khách bị bấm thực hiện phuonwg thức, ví dụ, các mã hiển thị ra khi máy khách không có quyền admin mà muốn thực hiện một request DELETE dữ liệu trên tài nguyên server |
404 | Not found | Chỉ ra rằng phương thức không tìm thấy |
409 | Conflict | Chỉ ra rằng xung đột đã bắt gặp trong khi thực thi phương thức được yêu cầu. Ví dụ: mã này được hiển thị nếu khách hàng cố gắng thêm một tài nguyên với , nhưng tài nguyên này đã tồn tại. |
500 | Interrnal Server Error | Chỉ ra rằng máy chủ bắt gạpw một lỗi ngoại lệ (exception) trong khi thực thi phương thức |
Phần mềm sử dụng để tiếp cận
Máy khách
Có thể sử dụng phần mềm postman làm máy khách khi tiếp cận với REST API
Máy chủ
Với máy chủ, nếu bạn sử dụng các framework để coding, chắc chắn sẽ có cơ chế để build sẵn API cho máy chủ theo cấu trúc framework, nếu bạn chưa học có thể tiếp cận một số các hãng có cung cấp API phổ biến để tập giao tiếp bằng máy khách, ví dụ:
- Airtable : hệ lưu trữ CSDL theo hàng và cột có các tính năng tương tự excel nhưng phát triển hơn, có cung cấp API để giao tiếp thêm sửa xóa
- Mapbox API : Bản đồ miễn phí cung cấp API để có thể vẽ bản đồ trực tuyến
- Openweather : cung cấp API lấy thời tiết
- …
Bài viết trên đưa ra các khái niện cơ bản khi sử dụng REST API tương tác giữa máy khách và máy chủ, hi vọng sau khi đọc xong bạn sẽ hiểu hơn về khái niệm của kiến trúc cũng như cách thức sử dụng REST API, chúc bạn thành công !