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.

RESTful API

Đầ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à RESTRESTful 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ư beautybeautiful). 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.

13 Bình Luận

Giang Hoàng

Giải thích còn hàn lâm ...

Sáng Vũ

Dễ hiểu vô cùng, thanks ^^

Thang Le

Cảm ơn a. Viết đơn giản và dễ hiểu ạ

Lê Vinh

Đọc nhiều bài rồi có mỗi bài này làm mình hiểu. Thank!!!

Vũ Anh

Hay quá, rất cụ thể, dễ hiểu

Hằng Thanh

Mì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

Hà Anh 23 April 2018

Có 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

Kevin Lu

Thanks, bai viet rat de hieu

Nguoi Com

Bà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 ạ ?

Nguoi Com

Bá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.

Nguyễn Duy 02 July 2019

Đấy là các phương thức sử dụng trong API

Tuãn Anh

Quá tuyệt vời

Kien Nguyen 01 August 2019

Comment nội dung kiểu như vậy sẽ bị xoá nhé bạn

Hoàng Nguyễn

Tks bạn, lên tìm hiểu mấy link mới dc 1 cái đọc dễ hiểu có ví dụ

Tuấn Anh

Thanks 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ả.

Nguyễn Duy 09 November 2019

Trong 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

Trung Nguyen

Mình cũng đang viết về Http request + postman http ở đây, mong dk trao đổi vs các bạn:

https://viblo.asia/p/tim-hieu-ve-httprequest-va-postman-Eb85ojR4l2G

Nguyễn Duy 09 November 2019

Mình nghe nói Viblo nổi tiếng Spam và dùng Google translate không biết đúng không ạ

Bài Viết Liên Quan