Cơ bản về REST và RESTfull API

Các lập trình viên web thường nói đến nguyên lý REST và cấu trúc dữ liệu RESTful bởi nó là một phần rất quan trọng trong sự phát triển các ứng dụng web hiện đại, tuy nhiên có rất nhiều người đang có những nhầm lẫn về các khái niệm này. REST không phải là một công nghệ, nó là một cách thức tạo ra các API với nguyên tắc tổ chức nhất định. Những nguyên tắc này nhằm hướng dẫn các nhà phát triển tạo ra môi trường xử lý các yêu cầu đến API một cách toàn diện.

Trong bài viết này, chúng ta sẽ làm rõ khái niệm REST API và bàn luận về cách thức phát triển RESTful, chúng ta tập trung vào “nó là cái gì?” hơn là “nó làm như thế nào?“.

Khái niệm về REST

REST là viết tắt của Representational State Transfer là một cách cung cấp khả năng tương tác giữa các hệ thống trên mạng Internet. Nghe có vẻ phức tạp nhỉ nhưng thực ra đây là một thuật ngữ rất đơn giản.
REST là tập hợp của các hướng dẫn và các kiểu cấu trúc được sử dụng trong truyền dữ liệu được áp dụng cho ứng dụng web nhưng có thể sử dụng trong cả truyền dữ liệu giữa các phần mềm. Thuật ngữ API là viết tắt của Application Programming Interface, là các phương thức giúp kết nối các thư viện hoặc ứng dụng. Tất cả các ứng dụng lớn đều có rất nhiều các API, ví dụ:
Hệ điều hành Windows có rất nhiều API, Facebook hay Twitter cũng vậy, các API này hoạt động với các nhiệm vụ và mục tiêu khác nhau.
Tổng hợp các khái niệm trên lại chúng ta có RESTful API là các API tuân thủ theo REST.

Cấu trúc REST là gì?

Thật khó để cụ thể cấu trúc REST là gì nhưng có một số quy tắc REST tuân thủ:

  • Sự nhất quán trong API.
  • Kết nối không trạng thái, không cần thông tin phiên làm việc phía máy chủ.
  • Sử dụng các mã trạng thái của HTTP
  • Sử dụng đường dẫn web URL có phân cấp logic.
  • Đánh phiên bản trong URL chứ không đưa vào HTTP header.

REST không có những tài liệu cụ thể như các đặc tả mà bạn thường thấy cho HTML5 hay ECMAScript 2015 chẳng hạn. Nhưng không sao, bạn không cần phải tuân thủ chặt chẽ REST vì có thể các API của bạn chỉ cần một phần các quy tắc của REST là đã đáp ứng được.

Mô hình RESTfull API - REST

REST là một hệ thống quy tắc đơn giản giúp truyền tải dữ liệu qua HTTP hiệu quả, đây cũng chính là lý do tại sao REST trở lên phổ biến và là sự lựa chọn tốt nhất cho việc phát triển các API.
RESTful API giúp cho người dùng sử dụng dễ dàng và mục đích chính cũng là tăng cường trải nghiệm người dùng.

Chi tiết về RESTful API

Các hướng dẫn dưới đây dành cho API trong môi trường ứng dụng web, nó yêu cầu phải thông qua HTTP và dữ liệu của các API được chứa trên các máy chủ bên ngoài. Chúng ta xem cách RESTful API thực hiện các hành động như thế nào từ phía người dùng. Người dùng API là các nhà phát triển web, họ có thể viết code để kết nối đến các API được cung cấp, dữ liệu sẽ được truyền thông qua HTTP. Bạn có thể sử dụng các dữ liệu này để hiển thị lên trang web của bạn mà không cần phải truy xuất đến máy chủ (giống như việc đẩy dữ liệu lên Twitter). Có 4 loại lệnh có thể được sử dụng để truy xuất các RESTful API:

  • GET sử dụng để lấy một đối tượng
  • POST để tạo một đối tượng
  • PUT để chỉnh sửa, thay thế một đối tượng
  • DELETE được dùng để xóa bỏ đối tượng

Tuy nhiên, không phải RESTful API nào cũng đầy đủ như vậy. Chúng ta hãy xem PokéAPI là một cơ sở dữ liệu API Pokémon miễn phí, nó hoàn toàn mở và giới hạn người dùng đến một số lượng yêu cầu API nhất định trong một khoảng thời gian, nhưng chỉ cho phép phương thức GET để truy cập tài nguyên, dạng này được gọi là consumption-only API.

RESTful API Pokemon

Dạng dữ liệu trả về cũng rất quan trọng và nên đồng bộ cho tất cả các thành phần API. JSON là một dạng dữ liệu phổ biến, XML cũng được dùng để trả về từ các API. RESTful API sử dụng các danh từ cho đối tượng API và các động từ để thực hiện các hành động trên đối tượng đó. Xác thực cũng cần thiết để hạn chế với các dữ liệu bạn không muốn công khai.

Truy xuất tài nguyên qua API

Các API công khai thường được truy xuất trực tiếp từ các địa chỉ website, do vậy cấu trúc đường dẫn là rất quan trọng và các URL kiểu này nên được thiết kế chỉ cho các yêu cầu API. Nhiều URL có thể đưa vào các tiền tố như /v2/ ám chỉ rằng đây là phiên bản thứ 2 của API. Nó là thông tin hữu ích cho các nhà phát triển để phân biệt với các phiên bản API 1.x mà cấu trúc dữ liệu đã thay đổi.
Một bài viết của Vinay Sahni về các cấu trúc URL cơ bản và các ví dụ sẽ giúp bạn có được cái nhìn chi tiết hơn.
Chú ý, với các phương thức HTTP khác nhau dữ liệu trả về của cùng một địa chỉ API có thể thay đổi, ví dụ GET để truy xuất nội dung trong khi POST để tạo nội dung mới. Yêu cầu có thể đến cùng một nơi nhưng kết quả rất khác nhau, do vậy cần thiết lập phương thức HTTP cho chuẩn xác.

Ahrefs API

Trên đây là danh sách các API được cung cấp bởi Ahrefs một công ty chuyên cung cấp dữ liệu phân tích tối ưu hóa từ khóa và nội dung cho các bộ máy tìm kiếm như Google, còn gọi là SEO. Có rất nhiều các ví dụ khác bạn có thể tìm thấy trên mạng như:

Tự xây dựng các API

Xây dựng một hệ thống API cung cấp dữ liệu cho website của bạn không phải là công việc quá phức tạp nếu bạn có những hiểu biết về các mẫu thiết kế API. Với các framework hiện nay như Laravel, API được xây dựng thực sự nhanh chóng, bạn cũng có thể sử dụng API để tạo ra các ứng dụng đa tầng phức tạp.
Mỗi API cần được kết nối đến máy chủ để trả về một vài loại dữ liệu, bạn phải viết code để làm điều đó và cũng cần định dạng dữ liệu trả về, tuy nhiên với Laravel thực sự đơn giản vô cùng. Các yêu cầu khác như xác thực, hạn chế lượng truy xuất cũng cần thiết nếu bạn không muốn công khai dữ liệu.
Chúng ta cùng nhau xem xét một số các nguyên lý cơ bản trong kiến trúc API.

Xây dựng đường dẫn

Một trong những công việc quan trọng của phát triển API là xây dựng các đường dẫn, khi tạo ra các tài nguyên chúng ta muốn sử dụng các danh từ chứ không phải động từ. Điều đó có nghĩa là dữ liệu API phải trả về một đối tượng như một người nào đó, một nơi nào đó … Thật khó để đưa ra các danh từ mô tả đầy đủ trong thiết kế đường dẫn, tuy nhiên nên đơn giản nhất có thể. Có một vài các quy tắc chọn danh từ trong đường dẫn như sau:

  • Nên chọn danh từ số nhiều, ví dụ /products/12345678
    Nên chọn các danh từ cụ thể tránh các từ trìu tượng, ví dụ /products/12345678 thay vì /items/12345678.

Thiết lập dạng dữ liệu trả về

Một vấn đề cần quan tâm là loại dữ liệu trả về, hầu hết người dùng API mong đợi dữ liệu trả về dạng JSON, tuy nhiên XML cũng là một sự lựa chọn tốt. Nhưng các bạn cũng đừng quá lo, nếu bạn sử dụng Laravel thì việc trả về dữ liệu kiểu gì cũng chỉ là thiết lập trong một câu lệnh đơn giản thôi.
Có rất nhiều vấn đề cần quan tâm trong khi phát triển các API, vậy để đơn giản hơn trong tiếp cận là bạn hãy xây dựng lấy một API đầu tiên, bằng cách này bạn có thể thấy được cách các nhà phát triển khác xây dựng API của họ và bạn sẽ dần làm quen thuộc với RESTful API.

Lời kết

Qua bài viết bạn có thể đã lờ mờ hiểu hơn về REST và RESTful API, với các bài viết về một công nghệ hay một thuật ngữ CNTT nào đấy, đôi khi bạn không cần quá hiểu chi tiết. Trong các dự án thực tế, các bài tập thực hành giúp bạn sẽ dần hiểu rõ hơn và một lúc nào đấy bạn sẽ giật mình và nghĩ thầm “RESTful API là cái khỉ gì đâu, khà khà…”. Trong thời gian không xa, chúng tôi sẽ có một loạt bài về xây dựng RESTful API trong Laravel, các bạn chờ đọc nhé.

 

Cơ bản về REST và RESTfull API

Related posts