Why are REST API design guidelines important?

(Including English version)

Việc viết một tài liệu hướng dẫn thiết kế REST API khá nhàm chán không ? Có ai quan tâm để đọc đâu ?  và liệu nó có đáng không ?

Những câu hỏi này nhắc mình nhớ đến câu chuyện sau: trong một dự án của công ty nọ, có nhóm lập trình viên (một tech lead và 2 bạn lập trình viên) chịu trách nhiệm viết REST API cho ứng dụng. 

Sau khi phân tích yêu cầu, phân chia nhiệm vụ cho mỗi thành viên viết các chức năng và bắt tay thiết kế và cài đặt các api. Mỗi người cũng thống nhất viết theo nguyên tắc REST API (chỉ trao đổi miệng). 

Trong quá trình cài đặt, lập trình viên A đặt tên resource là GET /users, POST /property-legals, sử dụng mã lỗi như 400,409.., trong khi lập trình viên B đặt tên là GET /user, POST /property_legal, không trả về mã lỗi mà chỉ ghi nội dung lỗi như “Mã không hợp lệ” .. 

Đến khi anh tech lead xem lại thì thấy rằng mỗi lập trình viên làm các cách khác nhau. Thế là triệu tập một vài cuộc họp để trao đổi và thống nhất cách đặt tên, cách trả về như thế nào. Cứ mỗi đợt xem lại, anh tech lead lại gọi họp lại để thêm quy tắc cho vấn đề bảo mật hoặc đối tượng trả về etc. Chính vì vậy, gây mất thời gian cho các thành viên phải cập nhật, sửa lại và tinh thần không thoải mái.

Cũng có nhiều lý do khác nhau mà tài liệu này mọi người không quan tâm ví dụ:

  • Thông thường khách hàng sẽ cung cấp tài liệu REST API để cho lập trình viên sử dụng 
  • Công ty không có bộ hướng dẫn thiết kế REST API có sẵn 
  • Lập trình viên nghĩ chỉ có mình làm trên dự án .. 

Vì vậy, nếu ko có tài liệu hướng dẫn thiết kế REST API thì sẽ gây những khó khăn như sau:

  • Khó bảo trì mã nguồn: mỗi lập trình sẽ viết những cách khác nhau vì vậy không có sự thống nhất giữa cách đặt tên uri, resources, status codes ..
  • Mất thời gian để trao đổi và sửa..

Chính vì thế, việc có tài liệu hướng dẫn thiết kế REST API sẽ giúp:

  • Việc thiết kế và xem duyệt REST API sẽ đơn giản hơn
  • Bảo đảm sư nhất quán những API 
  • Ít tranh luận hơn

Lưu ý rằng tài liệu hướng dẫn thiết kế REST API cũng nên đơn giản và dễ hiểu cho tất cả mọi người. Như vậy, tùy thuộc vào doanh nghiệp hoặc tính chất sản phẩm mà công ty sẽ định nghĩa những quy tắc cho phù hợp.

Thường trong tài liệu hướng dẫn thiết kế REST API, nó bao gồm những thông tin chính sau:

  • Quy trình thiết kế REST API
  • Quy ước đặt tên cho Resource: mình đề nghị sử dụng tiếng anh để đặt tên vì tiếng việt không dấu có nhiều ý nghĩa sẽ gây nhầm lẫn
    • ví dụ tên resource là users, nếu dịch sang tiếng việt là người dùng và ghi không dấu nguoi_dung, nguoidung
  • Phương thức HTTP (PUT, POST, GET, PATCH): Khi nào thì dùng những phương thức này ..
  • Mã trạng thái HTTP / HTTP Status codes: có trên 70 mã trạng thái HTTP nhưng mình nghĩ chỉ sử dụng vài nhóm với vài mã trạng thái thôi
    • Ví dụ: nhóm mã thành công 2xx: sử dụng 2 mã 200 và 201 (created)
    • Nhóm mã 3xx, 4xx, 5xx (500) 
  • Quy ước đặt phiên bản cho API /API Versioning: cái này cũng cần thiết, có nhiều cách đặt phiên bản ví dụ: major.minor.patch or v1, v2.. Tùy theo nhu cầu thì sử dụng cách đặt phiên bản cho phù hợp. Mình thì thích cách dùng v1,..
  • Quy ước cho tìm kiếm, lọc và sắp xếp (Search, filtering, sorting)
  • Xử lý lỗi / Error handling
  • Bảo mật / Security

Đối với những công ty lớn như google, facebook, microsoft, github, amazon etc họ đều phải có tài liệu này để giúp các nhóm lập trình viên làm việc chung với nhau.

Mặc dù công việc viết hướng dẫn này rất chán nhưng nó sẽ tiết kiệm cho chúng ta nhiều thời gian và tiền bạc.

// English version 

Why are API design guidelines important?

Writing API design guidelines is boring? Does anyone care to read? And is it worth it ?

These questions remind me of the following story: in a project of a certain company, there was a group of programmers including a tech lead and 2 programmers are responsible for writing a REST API for the application.

After analyzing the requirements, assigning each member to write the functions and start designing and implementing the api. Each person also agreed to comply with the principle of REST API (only oral communication).

During the programming, programmer A named the resource GET /users, POST /property-legals, using an error code like 400,409.., while programmer B named it GET /user, POST /property_legal, doesn’t return error code but just write error content like “Invalid code” ..

When the tech lead reviewed, he saw that each programmer did it differently. So he called a few meetings to discuss and agree on how to name and set error codes. Every review, the tech lead calls a meeting to add rules for security or return objects etc. Therefore, it takes time for members to update, correct and feel uncomfortable.

There are also many different reasons that people are not interested in this document, for example:

  • Usually the client will provide API specification documentation for the programmer to use
  • The company does not have available API design guidelines
  • The programmer thinks he works solo on the project..

Therefore, if there is no API design guidelines, it will cause the following difficulties:

  • Difficult to maintain source code: each programmer will program them differently so there is no consistency about naming uri, resources, status codes..
  • Takes time to discuss and fix …

Therefore, API design guidelines will help:

  • Simpler API design and review
  • Ensuring API Consistency
  • Less discussion

Note that the API design guidelines should also be simple and understandable for everyone. Thus, depending on the business or the organization, the company will define the rules accordingly. But often in API design guidelines, it covers the following main information:

  • REST API Design workflow
  • Resource naming: I suggest using English for naming because unsigned Vietnamese has many meanings that will cause confusion.
    • For example, the resource name is users, in English: users, but in Vietnamese: nguoi_dung, nguoidung etc.
  • HTTP methods (PUT, POST, GET, PATCH): When & How should we use these operations ?
  • HTTP Status codes: there are more than 70 HTTP status codes but I think only use a few groups with a few status codes:
    • Example: 2xx success code: use 2 codes such as 200 (success) and 201 (created)
    • Code group 3xx, 4xx, 5xx (500)
  • API Versioning: this is also necessary, there are many ways to set the version for example:
    • Method 1:  major.minor.patch
    • Method 2:  v1, v2…
    • Depending on your needs, use the appropriate version. I like using v1,..
  • Searching, filtering and sorting
  • Error handling
  • Security
  • ….

For big companies like google, facebook, microsoft, github, amazon etc, they all must have this document to help their teams work together.

In conclusion, although writing these guidelines are boring, it will save us a lot of time and money.

Covid 19 – Chuẩn bị gì khi cách ly ở nhà

covid-19

We would like to share some useful information in Vietnamese about covid-19 with Vietnamese citizen so that they should prepare well while isolating at home.

Mình chia sẻ một số thông tin sau đây để phòng covid-19 và tự bảo vệ bản thân trong thời kỳ cách ly do dịch bệnh covid-19.

Triệu chứng covid-19: sốt, ho khan, khó thở, khô họng và mất mùi vị.
– Thời gian ủ bệnh: từ 2-14 ngày, trung bình 5-7 ngày

1./ Thuốc

– Hạ sốt, Oresol : khi bị sốt nhẹ uống thuốc hạ sốt, uống nhiều nước ấm và bổ sung oresol để tránh mất nước
– Vitamin D3, C (mỗi ngày 1 viên : 5 ngày / tuần)

2./ Bổ sung thêm để tăng cường sức đề kháng cho cơ thể

– Uống nhiều nước (1.5l – 2l mỗi ngày): nên uống nước ấm
– Uống thêm nước ấm + mật ong + gừng (nếu nhà bạn có các loại này)
– Uống nước cam, chanh (thay thế Vitamin C)
– Ăn nhiều rau xanh, trái cây như chuối có 9.9 pH, tỏi 13.2 pH, Cải Xoang 22pH …
– Bữa ăn nên nóng

3./ Hoạt động khác

– Rửa tay thường xuyên
– Tập thể dục nhẹ nhàng
– Xúc họng bằng nước muối ít nhất 1 lần / 1 ngày: nên khò 3-4 phút
– Xịt mũi
– Dầu xoa
– Tinh thần thoải mái, suy nghĩ tích cực, không nên lo lắng, hoang mang: nghe nhạc thư giãn, đọc truyện vui, xem phim hài
– Nghỉ ngơi : ngủ 7-8 tiếng 1 ngày, tránh thức khuya
– Thường xuyên đo thân nhiệt, theo dõi sức khỏe hàng ngày

Người bệnh có dấu hiệu sốt tăng lên, ho khan, tức ngực, biểu hiện hô hấp (đếm nhịp thở nhanh trên 20 lần / phút (bình thường 16-18 lần / phút) cần liên hệ với cơ sở y tế gần nhất để được thăm khám và can thiệp kịp thời.
Bệnh nhân trở nặng đột xuất, khó thở chuyển sang viêm phổi .. gọi cấp cứu đưa tới cơ sở y tế

4./ Lưu ý:

  • Người bệnh:
    • cần chuẩn bị phòng riêng với dụng cụ vệ sinh riêng, mở cửa sổ không dùng máy lạnh. Nếu không có phòng riêng thì dọn một khu vực riêng cách người nhà 2m
    • Đồ dùng riêng: khăn, chén, ..
    • Luôn đeo khẩu trang
    • Hắt hơi, hay ho, khạc nên để trong sọt rác riêng
    • Bệnh nhân tự theo dõi về tình trạng sức khỏe, báo cáo với cơ quan theo dõi y tế hàng ngày và thực hiện xét nghiệm theo quy định
  • Người chăm sóc :
    • Đeo khẩu trang, găng tay, đồ bảo hộ
    • Rửa tay thường xuyên, ko chạm vào mũi và mắt
    • Động viên tinh thần người bệnh
    • Đo nhiệt cơ thể, ghi sổ theo dõi
    • Chuẩn bị đồ ăn dinh dưỡng, uống đủ nước