Xin chào mọi người, tôi là John và đây là bài đầu
tiên trong năm 2024 nên trước khi vào bài, tôi xin chúc mọi người 1
năm mới đầy thành công và đạt được nhiều thành tích tuyệt vời trong vũ trụ CODE nhé.
Bài hôm nay chúng ta sẽ nói về 1 anh bạn vô cùng quan trọng
nếu bạn là 1 coder thì không thể không gặp anh bạn này, đây là cầu nối giao lưu
giữa Front-End và Back-End trong 1 hệ thống,
được ví như là một người phục vụ trong nhà hàng và anh bạn đó chính là REST
API, nhân vật chính của bài viết ngày hôm nay.
Thế tại sao lại nói API được ví như 1 người
phục vụ, để tôi vẽ 1 khung cảnh cho mọi người dễ hình dung nhé. Hãy tưởng tượng
trong 1 nhà hàng, nhà bếp sẽ là nơi chế biến nguyên liệu từ những vật liệu ban
đầu - cái tủ lạnh sẽ là Database, người đầu bếp đang chế biến
thức ăn - Điều này giống như Back-End trong 1 hệ thống build 1
kiến trúc từ ERD, Configuration, Middleware…, bên ngoài là các bàn ăn sang trọng
được sắp xếp gọn gàng sạch sẽ để đón khách - Điều này giống như Front-End thiết
kế 1 giao diện bắt mắt, thân thiện với người dùng. Khi khách order 1 món ăn đến
nhà bếp thì người phục vụ đem thông tin order đến cho các bếp làm món - Lúc này
người phục vụ là cầu nối giữa khách và nhà bếp, điều này giống như khi User
tương tác ở Front-End gửi request đến Back-End cũng
cần có 1 phục vụ và REST API chính là người phục vụ đó.
Sơ qua thế mọi người cũng đã hiểu anh bạn API này
có vai trò gì và vô cùng quan trọng trong hệ thống rồi đúng không nào. Cũng vì
quá quan trọng nên các tiền bối đi trước đã đặt ra 9 Golden Rule khi
thiết kế REST API để cho API được rõ ràng và
dễ mở rộng, thôi chúng ta cùng nhau đi xem 9 Rule này mặt
ngang mũi dọc ra sao nhá.
- PROTOCOL
RULE
- Trong
thiết kế REST API, giao thức HTTPS được khuyên nên sử dụng
thay vì HTTP vì 2 thằng này rất khác nhau, HTTPS vượt trội hơn HTTP nhiều.
Nó có thể bảo mật thông tin trao đổi giữa client và server 1 cách an toàn,
nó có tính riêng tư, tính chính xác và rất an toàn khi duyệt web. Đây chỉ
là 1 đưa ra 1 vài lợi ích mặt nổi thôi nhưng đã rất đáng để sử dụng rồi ấy.
- DOMAIN
RULE
- Khi đặt
tên domain, chúng ta nên đặt tên 1 cách nhất quán, có 2 sự lựa chọn cho
domain api
- https://api.org.com/… → đặt api đi kèm với tên website
(suggestion)
- https://org.com/api/…. → đặt tên website trước rồi /
api
- VERSION
RULE
- Nên đặt
version khi thiết kế API, ghi tắt là v-number, việc đặt
version sẽ giúp chúng ta kiểm soát được thay đổi trong API, dễ dàng nâng cấp,
triển khai và thử nghiệm các tính năng mới mà không làm ảnh hưởng đến ứng
dụng hiện tại
- Example: https://api.org.com/v1/…. - https://api.org.com/v2/….
- ENDPOINT
RULE
- Trong
thiết kế API, mỗi url sẽ đại diện cho 1 resource và 1 api cụ thể, tên của
endpoint phải là DANH TỪ và nó tương ứng với tên của mỗi 1
table, nên đặt tên 1 cách rõ ràng, nhất quán để người khác chỉ cần đọc vào
là hiểu ngay api này sẽ làm nhiệm vụ gì
- Example: https://api.org.com/v1/products…. -
https://api.org.com/v2/users….
- OPTIONS
RULE
- Trong
API chúng ta có những HTTP method để tương tác giữa Client và Server, đây
chính là những chiếc cầu nối thứ thiệc và chúng ta sẽ có gồm khoảng 6 chiếc
cầu được xem là sử dụng nhiều nhất này, nó sẽ là:
- HttpGet()
- SELECT: Dùng để lấy resource, một hoặc nhiều từ server,
cụ thể là từ database
- HttpPost()
- CREATE: Tạo một resource mới lên server
- HttpPut()
- UPDATE: Cập nhật resource lên server, client phải cung
cấp các resource cần update, Put là để update nhiều field cùng 1 lúc, ví dụ
như khi user cập nhật thông tin của mình
- HttpPatch()
- UPDATE: Cập nhật resource lên server nhưng chỉ dành cho
update 1 field, ví dụ như update status của user
- HttpDelete()
- DELETE: Xóa resource khỏi server
- HttpHead()
- GET: Lấy siêu dữ liệu từ Client như là token…
- STATUS
RULE
- Trong
thiết kế API, Backend sẽ trả data về dưới dạng status, mỗi status sẽ biểu
thị cho Frontend biết được kết quả như thế nào, dưới đây là những status
phổ biến nhất
- 200 [Success]:
Server return data successful
- 201 [Post/Put/Patch]:
User create or update data successful
- 202 [Await/Async]:
Cho biết một yêu cầu vào hàng đợi đã được chấp nhận, trong bất đồng bộ
- 204 [Delete]:
User delete data successful
- 400 [Post/Put/Patch]:
Có lỗi trong yêu cầu chỉnh sửa data từ client và server chưa thực hiện được
request
- 401 [Unauthorized]:
User login sai password, chưa đăng nhập hoặc sai access token
- 403 [Forbidden]:
Ngược lại với 401, User đã login successful nhưng cố gắng access vào 1
website hoặc thực hiện 1 hành động không được phép, không có quyền truy cập
- 404 [Not
Found]: Một yêu cầu của User mà server không tìm thấy và không thể
return data, như get by id nhưng id đó không tồn tại trong database
- 406 [Not
Acceptable]: Không có định dàng mà User require, ví dụ yêu cầu định dạng
Json nhưng server chỉ có định dạng XML
- 410 [Not
Exist]: Lỗi xuất hiện ở Client khi truy cập 1 resource đã từng tồn tại
nhưng hiện tại thì không còn khả dụng, như là 1 website đã bị xóa
- 422 [Unprocessable
Entity]: cho biết yêu cầu định dạng đúng nhưng nội dung hiển thị có 1
số error mà server không thể display lên được
- 500 [Internal Server
Error]: Lỗi server, user không thể xác định request success or fail,
nguyên nhân có thể do nhiều lượng truy cập cùng 1 lúc, xung đột Plugin, lỗi
file….
- ERROR
HANDLE RULE
- Nên
đưa ra những message thông báo lỗi 1 cách rõ ràng cho phía client biết,
không nên chỉ return về status mà không có thêm thông tin gì, không nên
ghi quá dài dòng ví dụ { error: “Invalid Token”, “Account or password
wrong” }
- RETURN
RULE
- Khi
thực hiện 1 method API nào, chúng ta nên return data tương ứng, tùy thuộc
vào cách chúng ta thiết kế API
- Get /
collection: Return về 1 list data
- Get /
collection / resource: Return về 1 data duy nhất
- Post
/ collection: Return về data vừa được tạo
- Put /
collection / resource: Return data hoàn chỉnh
- Patch
/ collection / resource: Return data hoàn chỉnh
- Delete
/ collection / resource: Return empty data
- FILTERING
RULE
- Và
cuối cùng là Filtering, chúng ta có thể dùng nó để dễ dàng lấy data mình
mong muốn hơn, có 4 cú pháp filter phổ biến nhất
- ?limit=10:
Chỉ định số lượng bản ghi được trả về
- ?offset=10:
Chỉ định vị trí bắt đầu của bản ghi được trả về
- ?page=2
&per_page=100: Chỉ định số page và số lượng trên mỗi page
- ?sortby=name&order=asc:
Sắp xếp thuộc tính chỉ định theo thứ tự
Vậy là tôi đã giới thiệu xong cho mọi người 9 Golden Rule trong vũ trụ API rồi. Hãy tuân thủ theo nguyên tắc này thì API của mọi người mới có thể xanh-sạch-đẹp, hãy sửa thói quen design REST API từ ngay bây giờ nhé, sẽ giúp ích cho tương lai cho mọi người rất nhiều ấy. Hẹn gặp mọi người vào bài viết sau.
