Sunday, January 19, 2025

[REST API] – FLASK PYTHON #1: Giới thiệu về RESTful API

-

1. RESTful API là gì?

RESTful API (Representational State Transfer) đã trở thành một phần quan trọng của phát triển ứng dụng web hiện đại. Flask Python, một framework siêu nhẹ và mạnh mẽ, là một công cụ tuyệt vời để xây dựng RESTful API. Trong bài viết này, chúng ta sẽ bắt đầu khám phá cách tạo một RESTful API sử dụng Flask và thực hiện một ví dụ thực tế.

RESTful API là một kiến trúc thiết kế cho phép các ứng dụng giao tiếp với nhau thông qua giao thức HTTP.

Nó dựa trên một số nguyên tắc chính, bao gồm:

  • Tài nguyên (Resources): Tất cả dữ liệu được xem xét như là các tài nguyên, và mỗi tài nguyên được định danh bằng một URI (Uniform Resource Identifier).
  • Hoạt động trên tài nguyên (Operations on Resources): Các hoạt động CRUD (Create, Read, Update, Delete) được thực hiện trên tài nguyên thông qua các phương thức HTTP như GET, POST, PUT và DELETE.
  • Dữ liệu biểu diễn (Representation): Dữ liệu của tài nguyên có thể được biểu diễn dưới nhiều định dạng như JSON, XML, hoặc HTML.
  • Tính Stateless (Statelessness): Mỗi yêu cầu từ client đến server phải chứa đủ thông tin cần thiết để hiểu yêu cầu đó, và server không nên lưu trữ trạng thái của client.

2. API là gì?

API (Application Programming Interface) là một tập hợp các quy tắc và cơ chế mà thông qua đó, một ứng dụng hoặc một thành phần có thể tương tác với một ứng dụng hoặc thành phần khác. API cho phép các phần mềm khác nhau giao tiếp và làm việc cùng nhau một cách hiệu quả.

Dưới đây là một số điểm quan trọng để giải thích về API:

  • Quy tắc và Giao tiếp: API đặt ra các quy tắc về cách ứng dụng hoặc thành phần nên tương tác với nhau. Nó xác định cách thông điệp hoặc yêu cầu được gửi và nhận, đảm bảo tính thống nhất và đáng tin cậy trong quá trình trao đổi thông tin.
  • Tương tác giữa các ứng dụng: API cho phép các ứng dụng khác nhau gọi hoặc sử dụng các chức năng và dịch vụ của nhau mà không cần biết chi tiết về cách chúng hoạt động bên trong. Điều này giúp tạo ra sự linh hoạt và kết nối giữa các phần mềm khác nhau.
  • Được cung cấp thông qua Giao thức: API thường được cung cấp thông qua một giao thức cụ thể, thường là HTTP (Hypertext Transfer Protocol) trong trường hợp của API web. Điều này cho phép các ứng dụng web tương tác với nhau thông qua Internet.
  • Truy cập dữ liệu và chức năng: API có thể cung cấp truy cập đến dữ liệu hoặc chức năng cụ thể mà một ứng dụng hoặc thành phần khác muốn sử dụng. Điều này có thể bao gồm truy vấn cơ sở dữ liệu, xử lý logic, và nhiều tác vụ khác.
  • Định dạng dữ liệu: API thường cho phép truyền và nhận dữ liệu dưới dạng các định dạng phổ biến như JSON (JavaScript Object Notation) hoặc XML (eXtensible Markup Language). Điều này giúp dễ dàng trao đổi thông tin giữa các ứng dụng và biểu đạt dữ liệu một cách hiệu quả.

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

RESTful API (Representational State Transfer API) hoạt động dựa trên một số nguyên tắc và quy tắc chính để tạo ra một cách tương tác hiệu quả giữa các ứng dụng hoặc thành phần khác nhau. Dưới đây là cách RESTful API hoạt động:

  • Tài nguyên (Resources): Mọi dữ liệu trong hệ thống được xem xét như là các tài nguyên (resources). Mỗi tài nguyên có một định danh duy nhất thông qua URI (Uniform Resource Identifier) để truy cập.
  • Phương thức HTTP: RESTful API sử dụng các phương thức HTTP để thực hiện các hoạt động trên tài nguyên. Các phương thức chính bao gồm:
    • GET: Lấy thông tin về tài nguyên.
    • POST: Tạo mới một tài nguyên.
    • PUT: Cập nhật một tài nguyên hoặc tạo mới nếu chưa tồn tại.
    • DELETE: Xóa một tài nguyên.
  • Biểu diễn dữ liệu (Representation): Dữ liệu của tài nguyên được biểu diễn bằng các định dạng như JSON (JavaScript Object Notation), XML (eXtensible Markup Language), hoặc HTML (Hypertext Markup Language). Điều này cho phép dữ liệu được trao đổi giữa các ứng dụng trong định dạng chung.
  • Tính Stateless (Statelessness): Một RESTful API là stateless, có nghĩa là mỗi yêu cầu từ client đến server phải chứa đủ thông tin cần thiết để hiểu yêu cầu đó, và server không nên lưu trữ trạng thái của client. Điều này giúp tạo ra một cách tương tác độc lập và đáng tin cậy.
  • Trạng thái (State): Trạng thái của ứng dụng nên được lưu trữ và quản lý bởi client, không nên lưu trữ tại server. Client gửi thông tin trạng thái cần thiết trong mỗi yêu cầu.

Cụ thể, quá trình hoạt động của một RESTful API có thể diễn ra như sau:

  • Yêu cầu (Request): Client tạo ra một yêu cầu HTTP (GET, POST, PUT, DELETE) đến một URI cụ thể để tương tác với tài nguyên.
  • Xử lý yêu cầu (Request Handling): Server nhận yêu cầu, phân tích và xử lý nó dựa trên phương thức và URI. Nếu cần, server truy xuất và cập nhật dữ liệu tương ứng.
  • Trả về phản hồi (Response): Server trả về một phản hồi HTTP chứa dữ liệu yêu cầu, thường là trong định dạng JSON hoặc XML. Phản hồi này chứa thông tin về tài nguyên hoặc kết quả của yêu cầu.
  • Xử lý phản hồi (Response Handling): Client nhận phản hồi từ server và xử lý nó theo cách mà ứng dụng yêu cầu. Dữ liệu từ phản hồi có thể được sử dụng hoặc hiển thị cho người dùng.

RESTful API đơn giản và hiệu quả trong việc tạo ra các ứng dụng web tương tác. Việc tuân thủ các nguyên tắc REST giúp tạo ra các giao diện ứng dụng dễ sử dụng và dễ bảo trì.

4. Cấu trúc HTTP Request.

Cấu trúc HTTP Request là một phần quan trọng trong giao tiếp giữa máy khách (client) và máy chủ (server) thông qua giao thức HTTP (Hypertext Transfer Protocol). HTTP Request bao gồm các phần chính như URL, Method, Headers, và Body (nếu có). Dưới đây là một giải thích chi tiết về các phần cấu trúc của một HTTP Request:

  • URL (Uniform Resource Locator): Đây là địa chỉ duy nhất chỉ đến tài nguyên mà yêu cầu HTTP sẽ tương tác. URL thường bao gồm hai phần chính: phần đầu là giao thức (ví dụ: “http://” hoặc “https://”) và phần sau là đường dẫn tới tài nguyên cụ thể trên máy chủ (ví dụ: “/path/to/resource”).
  • Method (Phương thức): HTTP Request có một số phương thức (method) khác nhau để chỉ định mục tiêu của yêu cầu. Các phương thức phổ biến bao gồm:
    • GET: Sử dụng để lấy thông tin từ máy chủ dựa trên URI đã cung cấp.
    • POST: Dùng để gửi dữ liệu lên máy chủ thông qua các tham số HTTP. Thường được sử dụng để tạo mới dữ liệu trên máy chủ.
    • PUT: Ghi đè (overwrite) tất cả thông tin của tài nguyên bằng những gì được gửi lên.
    • PATCH: Ghi đè chỉ các thông tin đã thay đổi của tài nguyên.
    • DELETE: Sử dụng để xóa tài nguyên trên máy chủ.
    • HEAD: Tương tự như GET, nhưng không có phản hồi dữ liệu, chỉ có phản hồi header. Thường được sử dụng để kiểm tra sự tồn tại của tài nguyên.
    • CONNECT: Thiết lập một kết nối đến máy chủ theo URI.
    • OPTIONS: Yêu cầu thông tin về các tùy chọn giao tiếp cho tài nguyên.
    • TRACE: Thực hiện một bài kiểm tra (test) loop-back bằng cách theo dõi đường dẫn đến tài nguyên.
  • Headers (Tiêu đề): HTTP Request cũng có thể chứa các tiêu đề (headers) bổ sung để điều chỉnh yêu cầu và phản hồi. Ví dụ về tiêu đề bao gồm User-Agent (định danh trình duyệt hoặc ứng dụng gửi yêu cầu), Content-Type (kiểu dữ liệu gửi đi), và Authorization (xác thực người dùng).
  • Body (Nội dung): Một số phương thức như POST và PUT có thể kèm theo dữ liệu trong phần body của yêu cầu. Dữ liệu này thường được định dạng dưới dạng JSON hoặc x-www-form-urlencoded (dữ liệu biểu mẫu web).

Tóm lại, HTTP Request là cách mà client gửi yêu cầu đến server thông qua giao thức HTTP. Nó chứa thông tin như địa chỉ đích, phương thức, tiêu đề, và nội dung (nếu cần). Cấu trúc này giúp máy khách và máy chủ hiểu và tương tác với nhau theo cách chuẩn và hiệu quả.

5. Yêu Cầu Xác Thực.

Một phần quan trọng của hệ thống API là cách xác thực yêu cầu và cấu trúc dữ liệu trả về. Dưới đây là giải thích cho cấu trúc dữ liệu của một yêu cầu xác thực và cấu trúc dữ liệu trả về trong một RESTful API:

Authentication Request (Yêu Cầu Xác Thực):

  • status_code: Đây là một số mã trạng thái HTTP, thường được sử dụng để chỉ ra kết quả của yêu cầu xác thực. Ví dụ, mã 200 thường đại diện cho thành công, trong khi các mã khác như 401 có thể đại diện cho lỗi xác thực.
  • data: Đây là phần chứa dữ liệu liên quan đến yêu cầu xác thực. Trong trường hợp này, nó có thể chứa thông tin về người dùng đã xác thực, ví dụ: tên và địa chỉ email của người dùng.
  • error messages: Đây là phần dành cho các thông điệp lỗi. Nếu yêu cầu xác thực không thành công, thông điệp lỗi sẽ được trả về để mô tả tình trạng lỗi. Ví dụ, “not found” có thể là một thông điệp lỗi mô tả rằng không tìm thấy thông tin người dùng.

Cấu Trúc Dữ Liệu Trả Về (Response Data Structure):

Dữ liệu trả về trong ví dụ bạn cung cấp có cấu trúc sau:

  • status_code: Mã trạng thái HTTP (ví dụ: 200) để chỉ ra kết quả của yêu cầu.
  • data: Phần này thường chứa dữ liệu mà yêu cầu đang yêu cầu. Trong ví dụ này, nó chứa một danh sách các đối tượng. Mỗi đối tượng đều có các thuộc tính như “name” (tên), “email” (địa chỉ email), và “ny” (một thông điệp khác nhau, có thể liên quan đến trạng thái của đối tượng nào đó).
  • error messages: Phần này thường chứa thông điệp lỗi nếu có lỗi xảy ra trong quá trình xử lý yêu cầu. Trong ví dụ này, các thông điệp lỗi không được hiển thị rõ ràng, nhưng chúng có thể được cung cấp để mô tả tình trạng lỗi cụ thể nếu có.

Như vậy, cấu trúc dữ liệu của yêu cầu xác thực và cấu trúc dữ liệu trả về trong RESTful API thường bao gồm mã trạng thái, dữ liệu liên quan đến yêu cầu và thông điệp lỗi (nếu có). Cấu trúc này giúp định rõ kết quả của yêu cầu và làm cho việc xác thực và xử lý lỗi trở nên rõ ràng và dễ quản lý.

6. Status code.

Status code (Mã trạng thái) là một phần quan trọng của phản hồi từ máy chủ khi bạn thực hiện một yêu cầu tới một API. Chúng được sử dụng để chỉ ra kết quả của yêu cầu và tình trạng hiện tại của tài nguyên hoặc yêu cầu. Dưới đây là giải thích cho các mã trạng thái phổ biến:

  • 200 OK: Được trả về khi yêu cầu đã được xử lý thành công. Thường được sử dụng cho các phương thức GET, PUT, PATCH hoặc DELETE để chỉ ra rằng tài nguyên đã được trả về hoặc thao tác thành công.
  • 201 Created: Trả về khi một tài nguyên mới đã được tạo thành công. Thường được sử dụng sau khi thực hiện một phương thức POST để tạo tài nguyên mới.
  • 204 No Content: Trả về khi một yêu cầu đã thành công nhưng không có dữ liệu để trả về. Thường được sử dụng sau khi xóa tài nguyên.
  • 304 Not Modified: Được sử dụng để chỉ ra rằng tài nguyên không đã thay đổi và client có thể sử dụng dữ liệu cache mà nó đã lưu trữ.
  • 400 Bad Request: Trả về khi yêu cầu từ client không hợp lệ hoặc không thể được hiểu bởi máy chủ.
  • 401 Unauthorized: Trả về khi yêu cầu yêu cầu xác thực và client không có quyền truy cập tài nguyên hoặc không cung cấp thông tin xác thực hợp lệ.
  • 403 Forbidden: Trả về khi client không có quyền truy cập tài nguyên, ngay cả sau khi xác thực.
  • 404 Not Found: Trả về khi tài nguyên không được tìm thấy tại URI được yêu cầu.
  • 405 Method Not Allowed: Trả về khi phương thức HTTP không được phép cho tài nguyên cụ thể.
  • 410 Gone: Trả về khi tài nguyên đã không còn tồn tại và không còn được hỗ trợ. Thường được sử dụng để thông báo rằng tài nguyên đã bị xóa hoàn toàn.
  • 415 Unsupported Media Type: Trả về khi máy chủ không hỗ trợ định dạng dữ liệu được gửi trong yêu cầu.
  • 422 Unprocessable Entity: Trả về khi dữ liệu trong yêu cầu không thể được xử lý vì nó không hợp lệ hoặc không đáp ứng các điều kiện cần thiết.
  • 429 Too Many Requests: Trả về khi máy chủ từ chối yêu cầu do client đã gửi quá nhiều yêu cầu trong một khoảng thời gian ngắn.

Các mã trạng thái này giúp xác định trạng thái của yêu cầu và tài nguyên và giúp client hiểu cách phản hồi đã xử lý.

7. Ưu điểm của RESTful API.


RESTful API (Representational State Transfer API) có nhiều ưu điểm quan trọng khi sử dụng trong phát triển ứng dụng và giao tiếp giữa các thành phần khác nhau:

  • Rõ ràng và Đơn giản: RESTful API sử dụng các phương thức HTTP cơ bản như GET, POST, PUT, và DELETE cùng với các URI để thực hiện các thao tác trên tài nguyên. Điều này giúp làm cho API trở nên rõ ràng và dễ hiểu, đặc biệt là khi tài liệu API được tạo.
  • Đại diện Tài nguyên (Resource Representation): RESTful API tập trung vào tài nguyên của hệ thống. Mỗi tài nguyên được đại diện bằng một URI và các phương thức HTTP thao tác với tài nguyên này. Điều này giúp xác định và quản lý tài nguyên một cách tự nhiên và có tổ chức.
  • Đa định dạng Dữ liệu (Data Formats): RESTful API cho phép trả về dữ liệu dưới nhiều định dạng khác nhau như XML, HTML, JSON, hoặc thậm chí cả hình ảnh và tệp đính kèm. Điều này giúp đáp ứng đa dạng nhu cầu của các ứng dụng khác nhau.
  • Code Đơn giản và Ngắn Gọn: Phần lớn code cho RESTful API có thể đơn giản và ngắn gọn, do sử dụng các phương thức HTTP tiêu chuẩn và quy tắc REST. Điều này làm cho việc phát triển và bảo trì API trở nên dễ dàng hơn.
  • Tập Trung vào Tài nguyên (Resource-Centric): RESTful API tập trung vào các tài nguyên chính của hệ thống, giúp tạo ra một cấu trúc tổ chức dựa trên tài nguyên, dễ quản lý và mở rộng.
  • Hỗ trợ Phát triển ứng dụng (Application Development): RESTful API cho phép các ứng dụng bên ngoài kết nối đến dữ liệu của hệ thống một cách dễ dàng và linh hoạt. Điều này khuyến khích việc phát triển các ứng dụng mở rộng và tích hợp dữ liệu từ nhiều nguồn khác nhau.

Ví dụ về việc sử dụng RESTful API có thể thấy trong các dự án như Facebook, nơi cung cấp các REST API để cho phép các ứng dụng bên ngoài kết nối và tương tác với dữ liệu của họ, tạo ra sự kết nối mạnh mẽ giữa các ứng dụng khác nhau và cung cấp trải nghiệm người dùng tốt hơn.

8. Bắt đầu với Flask Python.

Trước khi bắt đầu, hãy cài đặt Flask bằng pip:

pip install flask

Hãy tạo một file Python với tên app.py và nhập mã sau:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run()

Chạy ứng dụng bằng cách mở terminal và gõ:

python3 app.py

Kết quả khi chạy lệnh trên.

(.venv) root@flask-13-200:/home/hello_world# python3 app.py
 * Serving Flask app 'app'
 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://192.168.13.200:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 643-950-507

Truy cập vào http://<ip_flask>:5000 trong trình duyệt, bạn sẽ thấy dòng chữ “Hello, World!” xuất hiện. Đó là ứng dụng Flask Python đầu tiên của bạn!

Hoặc đây là kết quả trên Postman (bạn có thể download nó tại https://www.postman.com/downloads/).

Trong các bài viết tiếp theo, chúng ta sẽ mở rộng ứng dụng này để tạo và quản lý tài nguyên thông qua RESTful API, sử dụng Flask. Chúng ta sẽ tạo, đọc, cập nhật và xóa tài nguyên, tạo các endpoints, và xử lý các yêu cầu HTTP khác.

Kết luận

Bài viết này đã giới thiệu khái niệm về RESTful API và cách bắt đầu với Flask Python để xây dựng ứng dụng web hỗ trợ API. Trong các bài viết tiếp theo, chúng ta sẽ phát triển ứng dụng này để hiểu rõ hơn về cách thực hiện các hoạt động CRUD trên tài nguyên. Hãy tiếp tục theo dõi để tìm hiểu thêm!

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories