RESTful API Cho Người Bắt Đầu
Nếu bạn tìm thấy bài viết này của tôi trên Google thì tôi đoán rằng bạn đã từng ít nhất một vài lần nghe về thuật ngữ RESTful API và đang không hiểu chính xác thuật ngữ này là gì. Và nếu giống như tôi thì có thể bạn đã phải bỏ ra vài giờ đồng hồ để đọc các giải thích trên mạng mà cuối cùng vẫn không hiểu tường tận về thuậ ngữ này. Nếu bạn đang trong trường hợp này thì hãy bỏ ra 10 phút để đọc bài viết này. Tôi sẽ trình bày theo cách thực tế, ngắn gọn và dễ hiểu nhất có thể để bạn nắm vẵng được khái niệm RESTful API để áp dụng trong việc tạo ứng dụng REST API dựa trên những hiểu biết có được.
Đầu tiên chúng ta cần tìm hiểu về khái niệm resource.
Resource
Quản lý resource (tài nguyên) là một phần quan trọng và chiếm phần lớn trong việc phát triển website. Trong đó resource của các website khác nhau có thể sẽ khác nhau. Với các trang mạng xã hội như Facebook thì resource thường là danh sách người dùng (user hoặc account), danh sách các bài viết (post hoặc article), các ảnh được đăng (photo hoặc image), các trang fanpage (fanpage)... Đối với một trang chia sẻ ảnh như Instagram thì resource có thể là các ảnh được đăng (photo), danh sách người dùng (user)... Đối với các trang bán hàng thì resource có thể là danh sách sản phẩm (product), danh sách các người bán (seller), danh sách khách hàng (user hay customer)...
Việc quản lý resource của một website bao gồm 4 tác vụ chính:
- Tạo mới một resource (create)
- Lấy thông tin một resource (read)
- Cập nhật một resource (update)
- Xoá một resource (delete)
Có rất nhiều cách khác nhau để xây dựng một trang web thực hiện 4 tác vụ trên. Ví dụ với một trang blog chạy dưới tên miền là http://my-blog.xyz
thì để xem nội dung một bài viết (post) với ID là 123 bạn có thể làm theo một trong các cách sau:
- Gửi một request tới URL
http://my-blog.xyz/posts?id=123
với HTTP method là GET - Gửi một request tới URL
http://my-blog.xyz/posts/123
với HTTP method là GET - Gửi một request tới URL
http://my-blog.xyz/action=view_post&id=123
với HTTP method là GET - Gửi một request tới URL
http://my-blog.xyz/view_post&id=123
với HTTP method là GET - Gửi một request tới URL
http://my-blog.xyz/posts?id=123
với HTTP method là POST - Gửi một request tới URL
http://my-blog.xyz/posts/123
với HTTP method là POST - ...
Và sau một thời gian dài thì người ta đã thống nhất ra các tiêu chuẩn khác nhau để thực hiện việc quản lý resource. Các tiêu chuẩn này (hay còn được gọi là Web API hoặc HTTP API) quy định một cách thống nhất việc quản lý các resource của web. Và RESTful là một trong các web API được sử dụng phổ biến ngày nay.
RESTful API Là Gì
RESTful API là một tiêu chuẩn dùng trong việc thết kế các thiết kế API cho các ứng dụng web để quản lý các resource. RESTful là một trong những kiểu thiết kế API được sử dụng phổ biến nhất ngày nay.
Trọng tâm của REST quy định cách sử dụng các HTTP method (như GET, POST, PUT, DELETE...) và cách định dạng các URL cho ứng dụng web để quản các resource. Ví dụ với một trang blog để quản lý các bài viết chúng ta có các URL đi với HTTP method như sau:
- URL tạo bài viết:
http://my-blog.xyz/posts
. Tương ứng với HTTP method làPOST
- URL đọc bài viết với ID là
123
:http://my-blog.xyz/posts/123
. Tương ứng với HTTP method làGET
- URL cập nhật bài viết với ID là
123
:http://my-blog.xyz/posts/123
. Tương ứng với HTTP method làPUT
- URL xoá bài viết với ID là
123
:http://my-blog.xyz/posts/123
. Tương ứng với HTTP method làDELETE
Với các ứng dụng web được thiết kế sử dụng RESTful, lập trình viên có thể dễ dàng biết được URL và HTTP method để quản lý một resource. Bạn cũng cần lưu ý bản thân RESTful không quy định logic code ứng dụng và RESTful cũng không giới hạn bởi ngôn ngữ lập trình ứng dụng. Bất kỳ ngôn ngữ lập trình (hoặc framework) nào cũng có thể áp dụng RESTful trong việc thiết kế API cho ứng dụng web.
REST và REST(ful)
Một vấn đề mà nhiều bạn mới tìm hiểu về RESTful cũng thường cảm thấy bối rối đó là REST và RESTful khác nhau như thế nào. REST là viết tắt của cụm từ Representational State Transfer và các ứng dụng sử dụng kiểu thiết kế REST thì được gọi là RESTful (-ful là tiếp vị ngữ giống như beauty và beautiful). Tất nhiên bạn cũng có thể sử dụng thuật ngữ REST thay cho RESTful và ngược lại.
Guest
- 1970/01/01 Trả lờiDễ hiểu vô cùng, thanks ^^
Guest
- 1970/01/01 Trả lờiCảm ơn a. Viết đơn giản và dễ hiểu ạ
Guest
- 1970/01/01 Trả lờiĐọc nhiều bài rồi có mỗi bài này làm mình hiểu. Thank!!!
Guest
- 1970/01/01 Trả lờiHay quá, rất cụ thể, dễ hiểu
Guest
- 1970/01/01 Trả lờiMình không có kiến thức về code nên lù mù trong lĩnh vực này.
Mình muốn hỏi là có thể cấp quyền cho từng cá nhân để có thể xem được API của mình theo 1 mã số được định sẵn không vậy
Guest
- 1970/01/01 Trả lờiCó nhé bạn tuy nhiên thì bạn cần thêm bước authentication và authorization. Ban có thể đọc bài viết này về OpenID và OAuth
Guest
- 1970/01/01 Trả lờiBài viết rất hay nhưng anh cho em hỏi thêm là : Có thể coi những HTTP method (GET , POST , DELETE , PUT ..) như là các API không ạ ?
Guest
- 1970/01/01 Trả lờiBác cho em hỏi bác viết rằng : Và RESTful là một trong các web API được sử dụng phổ biến ngày nay ??
Vậy có thể coi GET , POST , PUT , DELETE chính là 1 trong các webAPI đấy không nhỉ ? Em cảm ơn các vì bài viết.
Guest
- 1970/01/01 Trả lờiTks bạn, lên tìm hiểu mấy link mới dc 1 cái đọc dễ hiểu có ví dụ
Guest
- 1970/01/01 Trả lờiThanks tác giả vì bài viết, tôi chỉ có một chút lăn tăn vì có case tôi đã gặp trong thực tế và nếu dùng validate restful trong trường hợp này nó sẽ báo sai. Đó là tôi dùng một httpPost nhưng thay vì truyền id qua url thì tôi dùng body với với kiểu x-www-form-urlencoded để truyền các param (vì nó chỉ có 2,3 param nên tôi ko dùng body kiểu json vì như thế phải defined một object mới), Chi tiết:
route: ../api/User/Disable (format: api/controller/[action])
method: HttpPost
Body: Content-Type: x-www-form-urlencoded
Tác giả cho tôi hỏi với tổ chức như vậy thì tôi đang bị sai quy chuẩn của rest-ful ở chỗ nào?
Lý do tôi tổ chức như vậy vì id của tôi nó có ký tự đặc biệt nên nếu để trên url trong route thì sẽ bị lỗi khi request (ex: ".","?","@",...) nên tôi mới phải để vào trong body của request.
Thanks tác giả và mong sớm nhận được phản hồi của tác giả.
Guest
- 1970/01/01 Trả lờiTrong các ứng dụng phức tạp có thể để ID trong body nếu cần, ví dụ như trên Codehub anh sẽ thấy URL sửa bài viết không có ID. Nhưng nhìn chung tốt nhất nên tuân theo nếu có thể, đây cũng là tuân thủ nguyên tắc least surprise principle trong lập trình