Hiểu rõ hơn về RESTful API

Trong bài viết này chúng ta sẽ cố gắng đi tìm hiểu và giải thích được RESTful API là gì?, bên cạnh đó mình cũng sẽ chia sẻ những kinh nghiệm khi làm việc với REST. Chúng ta sẽ cùng khám phá ý nghĩa của API, về HTTP, học về REST, xem nó hoạt động thế nào, và đưa ra một ví dụ đơn giản về thiết kế kiến trúc của RESTful API. (tham khảo khóa học xây dựng RESTful API với NodeJS)

Một chút lý thuyết

API (application programming interface) là một tập các quy tắc và cơ chế mà theo đó, một ứng dụng hay một thành phần sẽ tương tác với một ứng dụng hay thành phần khác. Chính cái tên đã nói lên ý nghĩa của nó, nhưng chúng ta hãy cùng đi sâu hơn vào chi tiết. API có thể trả về dữ liệu mà bạn cần cho ứng dụng của mình ở những kiểu dữ liệu phổ biến như JSON hay XML. Trong bài viết này chúng ta sẽ tập trung xung quanh JSON thôi nhé.

Hãy cùng nhìn vào một ví dụ. Có thể bạn thấy quen thuộc với những ứng dụng web như GitHub, Facebook, Google,… Nó có những API riêng để cho chúng ta sử dụng, một trong số đó giúp chúng ta lấy được thông tin về người dùng, repositores của họ và rất rất nhiều thứ hữu ích khác nữa khi bạn dùng đề xây dựng ứng dụng của mình. Bạn có thể sử dụng và thao tác với dữ liệu này bên trong ứng dụng của mình.

Dưới đây là một ví dụ của một request chuẩn tới một API, nó sẽ trông như thế này:

Request sẽ được thực hiện thông qua CURL (xem thêm CURL). Ngoài ra chúng ta còn có các công cụ tiện ích khác giúp chúng ta thực hiện một request như Postman, REST Client,… (Các bạn có thể cài thông qua Chrome web app).

Dưới đây là kết quả trả về mà server trả về sau khi nhận được request, gói response sẽ là:

REST là gì?

Và bây giờ, chúng ta sẽ cùng phân tích về REST. REST là từ viết tắt cho REpresentational State Transfer. Khái niệm này có thể được diễn giải bằng câu từ như sau: dữ liệu sẽ được truyền tải và trình bày cho client side dưới định dạng nào đó (JSON). Có một trong những điểm chính mà bạn cần phải nhớ: REST không phải là một chuẩn hay một giao thức, đây là một cách tiếp cận, một kiểu kiến trúc để viết API.

Sâu hơn về REST

Một web service là một tập hợp các giao thức và chuẩn được sử dụng cho mục đích trao đối giữa ứng dụng và hệ thống. Các ứng dụng phần mềm được viết bởi các ngôn ngữ khác nhau và chạy bởi các nền tảng khác nhau có thể sử dụng web service để trao đổi dữ liệu qua mạng máy tính như internet theo các cách tương tự như trao đổi trên một máy tính.

Web service dựa trên các kiến trúc REST được biết như RESTful webservice . Những webservice này sử dụng phương thức HTTP để triển khai các định nghĩa kiến trúc REST. Một RESTful web service thường được định nghĩa một URI (kiểu như đường dẫn), Uniform Resource Identifier như một service (dịch vụ).

RESTful hoạt động như thế nào?

Khi làm việc với server sẽ gồm 4 hoạt động thiết yếu là:

  • Lấy dữ liệu ở một định dạng nào đó (JSON)
  • Tạo mới dữ liệu
  • Cập nhật dữ liệu
  • Xóa dữ liệu

REST hoạt động chủ yếu dựa vào giao thức HTTP (xem thêm HTTP). Mỗi trong 4 hoạt động cơ bản trên sẽ sử dụng những phương thức HTTP riêng (HTTP method):

  • GET: lấy dữ liệu
  • POST: tạo mới
  • PUT: cập nhật (thay đổi)
  • DELETE: Xóa dữ liệu

Những phương thức (hoạt động) này thường được gọi là CRUD (xem thêm CRUD) tương ứng với Create, Read, Update, Delete – Tạo, Đọc, Sửa, Xóa.

Dưới đây là bảng tương quan giữa phương thức HTTP, CRUD và các lệnh SQL.

Tất cả các request mà bạn (client side) thực hiện đều cũng sẽ có mã trạng thái HTTP (HTTP status code). Có rất nhiều status code và sẽ được chia ra thành 5 lớp. Chữ số đầu tiên cho biết một status code thuộc vào lớp nào:

  • 1xx: hàm ý mang thông tin.
  • 2xx: hàm ý thành công
  • 3xx: hàm ý điều hướng
  • 4xx: hàm ý là có lỗi từ phía client side
  • 5xx: hàm ý là có lỗi phía máy chủ (server)

Các bạn có thể tham khảo thêm về các status code của HTTP tại đây.

Kiến trúc thiết kế của RESTful

Tất cả tài nguyên (resources) trong REST là thực thể (entities). Có thể độc lập như:

  • GET /users — lấy danh sách các người dùng;
  • GET /users/123 — lấy thông tin một người dùng có id = 123;
  • GET /posts — lấy tất cả bài post.

Cũng sẽ có những thực thể độc lập dựa vào những thực thể khác:

  • GET /users/123/projects  – Lấy tất cả projects của user với id = 123

Các ví dụ trên cho thấy rằng GET lấy thông tin thực thể mà client side đã request. Một request thành công sẽ được trả về dữ liệu liên quan tới thực thể và kèm theo status code là 200 (OK). Nếu có lỗi, bạn sẽ nhận lại status code 404 (Not Found), 400 (Bad Request) hoặc 5xx (Server Error).

Cùng chuyển qua phương thức POST (tạo mới một thực thể):

  • POST /users.

Khi tạo một thực thể mới, bạn sẽ truyền dữ liệu vào trong request body. Ví dụ:

{
“first_name”: “Vasyl”,
“last_name”: “Redka”
}

Sau khi gửi request lên server, bạn sẽ nhận được kết quả trả về có thể là status code 201 (Created), hàm ý tạo mới thành công. Ví dụ, response trả về sẽ là dữ liệu của một thực thể vừa được tạo:

{
“id”: “1”,
“first_name”: “Vasyl”,
“last_name”: “Redka”
}

Request tiếp theo là PUT. Được dùng để cập nhật thực thể. Khi bạn gửi request thì body cũng cần phải bao gồm dữ liệu cần được cập nhật liên qua tới thực thể.

  • PUT /users/123 – cập nhật người dùng với id = 123

Sự thay đổi cần phải được chỉ ra là cập nhật cho thực thể nào, được truyền vào thông qua các tham số. Nếu được cập nhật thành công, sẽ trả về mã 200 (OK) và dữ liệu của thực thể vừa được cập nhật.

Request cuối cùng là DELETE. Nó rất là dễ hiểu và được dùng để xóa một thực thể cụ thể được chỉ định thông qua tham số.

  • DELETE /users/123 – xóa một user với id = 123

Nếu xóa thành công thì sẽ trả về status 200 (OK) cùng với response body bao gồm thông tin về trạng thái của thực thể. Ví dụ, khi bạn không xóa thực thể từ database mà chỉ đánh dấu là đã được xóa, status code sẽ luôn trả về là 200 (OK) và response body với trạng thái. DELETE có thể trả về status 204 (No Content) và không kèm theo response body.

Nếu bạn xóa thực thể trong database luôn thì status code cho request thứ 2 sẽ trả về là 404 (Not Found) bởi vì thực thể đã được xóa và không thể truy cập được nữa.

Như vậy là các bạn có thể hiểu được phần nào về API, RESTRESTful. Hi vọng những kiến thức này sẽ giúp ích cho các bạn thật nhiều trong con đường trở thành một lập trình viên chuyên nghiệp. Hãy cùng chia sẻ bài viết này và tiếp tục theo dõi những bài viết bổ ích khác từ laptrinhvien.io nhé.

Nguyễn Hải Hà – JANETO

TRUNG TÂM ĐÀO TẠO LẬP TRÌNH VIÊN JANETO


 0933067997 – 0933267337
 facebook.com/laptrinhvienio
 YouTube/laptrinhvienio
 tuyensinh@laptrinhvien.io
 Địa chỉ: Tầng 2, tòa nhà The Morning Star – 57 Quốc Lộ 13, Phường 26, Quận Bình Thạnh, Tp. Hồ Chí Minh.

60

Bình luận

0933 06 7997
0933 26 7337
tuyensinh@laptrinhvien.io