Ví dụ api phần còn lại của python với microservice

Trong những năm gần đây, REST (Chuyển giao trạng thái đại diện) đã nổi lên như một thiết kế kiến ​​trúc tiêu chuẩn cho các dịch vụ web và API web

Trong bài viết này, tôi sẽ chỉ cho bạn cách dễ dàng để tạo một dịch vụ web RESTful bằng Python và vi khung Flask

REST là gì?

Các đặc điểm của hệ thống REST được xác định bởi sáu quy tắc thiết kế

  • Máy khách-Máy chủ. Cần có sự tách biệt giữa máy chủ cung cấp dịch vụ và máy khách sử dụng dịch vụ đó
  • không quốc tịch. Mỗi yêu cầu từ máy khách phải chứa tất cả thông tin mà máy chủ yêu cầu để thực hiện yêu cầu. Nói cách khác, máy chủ không thể lưu trữ thông tin do máy khách cung cấp trong một yêu cầu và sử dụng thông tin đó trong một yêu cầu khác
  • Có thể lưu vào bộ nhớ cache. Máy chủ phải chỉ ra cho máy khách biết các yêu cầu có thể được lưu vào bộ đệm hay không
  • Hệ thống lớp. Giao tiếp giữa máy khách và máy chủ phải được chuẩn hóa theo cách cho phép các trung gian phản hồi các yêu cầu thay vì máy chủ cuối mà không cần máy khách phải làm bất cứ điều gì khác
  • Giao diện thống nhất. Phương thức giao tiếp giữa client và server phải thống nhất
  • Mã theo yêu cầu. Máy chủ có thể cung cấp mã hoặc tập lệnh thực thi để máy khách thực thi trong ngữ cảnh của chúng. Ràng buộc này là ràng buộc duy nhất không bắt buộc

Dịch vụ web RESTful là gì?

Kiến trúc REST ban đầu được thiết kế để phù hợp với giao thức HTTP mà web trên toàn thế giới sử dụng

Trọng tâm của khái niệm về dịch vụ web RESTful là khái niệm về tài nguyên. Tài nguyên được đại diện bởi các URI. Các máy khách gửi yêu cầu tới các URI này bằng các phương thức được xác định bởi giao thức HTTP và có thể do đó trạng thái của tài nguyên bị ảnh hưởng thay đổi

Các phương thức yêu cầu HTTP thường được thiết kế để tác động đến một tài nguyên nhất định theo các cách tiêu chuẩn

HTTP MethodActionExamplesGETNhận thông tin về tài nguyênhttp. //thí dụ. com/api/orders
(truy xuất danh sách đơn đặt hàng)GETLấy thông tin về tài nguyênhttp. //thí dụ. com/api/orders/123
(truy xuất đơn hàng #123)POSTTạo tài nguyên mớihttp. //thí dụ. com/api/orders
(tạo đơn hàng mới, từ dữ liệu được cung cấp cùng với yêu cầu)PUTCập nhật tài nguyênhttp. //thí dụ. com/api/orders/123
(cập nhật đơn hàng #123, từ dữ liệu được cung cấp cùng với yêu cầu)DELETEDXóa tài nguyênhttp. //thí dụ. com/api/orders/123
(xóa đơn hàng #123)

Thiết kế REST không yêu cầu định dạng cụ thể cho dữ liệu được cung cấp cùng với các yêu cầu. Nói chung, dữ liệu được cung cấp trong phần thân yêu cầu dưới dạng đốm màu JSON hoặc đôi khi dưới dạng đối số trong phần chuỗi truy vấn của URL

Thiết kế một dịch vụ web đơn giản

Nhiệm vụ thiết kế một dịch vụ web hoặc API tuân thủ các nguyên tắc REST sau đó trở thành một bài tập xác định các tài nguyên sẽ bị lộ và chúng sẽ bị ảnh hưởng như thế nào bởi các phương thức yêu cầu khác nhau

Giả sử chúng ta muốn viết một ứng dụng To Do List và chúng ta muốn thiết kế một dịch vụ web cho nó. Điều đầu tiên cần làm là quyết định URL gốc để truy cập dịch vụ này là gì. Ví dụ: chúng tôi có thể hiển thị dịch vụ này dưới dạng

http://[hostname]/todo/api/v1.0/

Ở đây tôi đã quyết định đưa tên của ứng dụng và phiên bản API vào URL. Bao gồm tên ứng dụng trong URL rất hữu ích để cung cấp một không gian tên tách dịch vụ này khỏi các dịch vụ khác có thể chạy trên cùng một hệ thống. Việc đưa phiên bản vào URL có thể giúp thực hiện các bản cập nhật trong tương lai, vì các chức năng mới và có khả năng không tương thích có thể được thêm vào trong một phiên bản mới mà không ảnh hưởng đến các ứng dụng dựa trên các chức năng cũ hơn

Bước tiếp theo là chọn các tài nguyên sẽ được cung cấp bởi dịch vụ này. Đây là một ứng dụng cực kỳ đơn giản, chúng tôi chỉ có các nhiệm vụ, vì vậy tài nguyên duy nhất của chúng tôi sẽ là các nhiệm vụ trong danh sách việc cần làm của chúng tôi

Tài nguyên nhiệm vụ của chúng tôi sẽ sử dụng các phương thức HTTP như sau

Phương thức HTTPURIActionGEThttp. //[tên máy chủ]/todo/api/v1. 0/tasksTruy xuất danh sách nhiệm vụGEThttp. //[tên máy chủ]/todo/api/v1. 0/t task/[task_id]Truy xuất tác vụPOSThttp. //[tên máy chủ]/todo/api/v1. 0/tasksTạo một nhiệm vụ mớiPUThttp. //[tên máy chủ]/todo/api/v1. 0/t task/[task_id]Cập nhật tác vụ hiện cóDELETEhttp. //[tên máy chủ]/todo/api/v1. 0/t task/[task_id]Xóa tác vụ

Chúng ta có thể định nghĩa một tác vụ có các trường sau

  • Tôi. định danh duy nhất cho các nhiệm vụ. kiểu số
  • Tiêu đề. mô tả nhiệm vụ ngắn. loại chuỗi
  • sự mô tả. mô tả nhiệm vụ dài. Dạng văn bản
  • xong. trạng thái hoàn thành nhiệm vụ. kiểu Boolean

Và với điều này, về cơ bản chúng ta đã hoàn thành phần thiết kế của dịch vụ web của mình. Tất cả những gì còn lại là để thực hiện nó

Giới thiệu ngắn gọn về Flask microframework

Nếu bạn đã đọc sê-ri Flask Mega-Tutorial của tôi, bạn sẽ biết rằng Flask là một khung web Python đơn giản nhưng rất mạnh mẽ

Trước khi chúng tôi đi sâu vào chi tiết cụ thể của các dịch vụ web, hãy xem lại cách cấu trúc một ứng dụng web Flask thông thường

Tôi sẽ cho rằng bạn biết những điều cơ bản khi làm việc với Python trong nền tảng của bạn. Các dòng lệnh ví dụ tôi sẽ hiển thị bên dưới dành cho hệ điều hành giống Unix. Tóm lại, điều đó có nghĩa là chúng sẽ hoạt động trên Linux, Mac OS X và cả trên Windows nếu bạn sử dụng Cygwin. Các lệnh hơi khác một chút nếu bạn sử dụng phiên bản Python gốc của Windows

Hãy bắt đầu bằng cách cài đặt Flask trong môi trường ảo. Nếu bạn chưa cài đặt

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
0 trong hệ thống của mình, bạn có thể tải xuống từ https. //pypi. con trăn. org/pypi/virtualenv

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask

Bây giờ chúng ta đã cài đặt Flask, hãy tạo một ứng dụng web đơn giản, chúng ta sẽ đặt ứng dụng này vào một tệp có tên là

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
1

#!flask/bin/python
from flask import Flask

app = Flask(__name__)

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

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

Để chạy ứng dụng này, chúng ta phải thực thi

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
1

$ chmod a+x app.py
$ ./app.py
 * Running on http://127.0.0.1:5000/
 * Restarting with reloader

Và bây giờ bạn có thể khởi chạy trình duyệt web của mình và gõ

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
3 để xem ứng dụng nhỏ bé này đang hoạt động

Đơn giản, phải không?

Triển khai các dịch vụ RESTful trong Python và Flask

Xây dựng các dịch vụ web với Flask đơn giản một cách đáng ngạc nhiên, đơn giản hơn nhiều so với việc xây dựng các ứng dụng phía máy chủ hoàn chỉnh giống như ứng dụng tôi đã xây dựng trong Mega-Tutorial

Có một số tiện ích mở rộng Flask giúp xây dựng các dịch vụ RESTful với Flask, nhưng nhiệm vụ này đơn giản đến mức theo tôi thì không cần sử dụng tiện ích mở rộng

Các máy khách của dịch vụ web của chúng tôi sẽ yêu cầu dịch vụ thêm, xóa và sửa đổi các tác vụ, vì vậy rõ ràng chúng tôi cần có một cách để lưu trữ các tác vụ. Cách rõ ràng để làm điều đó là xây dựng một cơ sở dữ liệu nhỏ, nhưng vì cơ sở dữ liệu không phải là chủ đề của bài viết này nên chúng tôi sẽ thực hiện một cách tiếp cận đơn giản hơn nhiều. Để tìm hiểu về cách sử dụng hợp lý cơ sở dữ liệu với Flask một lần nữa, tôi khuyên bạn nên đọc Mega-Tutorial của tôi

Thay cho cơ sở dữ liệu, chúng tôi sẽ lưu trữ danh sách nhiệm vụ của mình trong cấu trúc bộ nhớ. Điều này sẽ chỉ hoạt động khi máy chủ web chạy ứng dụng của chúng tôi là một quy trình đơn và luồng đơn. Điều này không sao đối với máy chủ web phát triển riêng của Flask. Không được phép sử dụng kỹ thuật này trên máy chủ web sản xuất vì phải sử dụng thiết lập cơ sở dữ liệu phù hợp

Sử dụng ứng dụng Flask cơ bản, chúng tôi hiện đã sẵn sàng triển khai điểm vào đầu tiên của dịch vụ web của mình

________số 8

Như bạn có thể thấy, không có nhiều thay đổi. Chúng tôi đã tạo một cơ sở dữ liệu bộ nhớ gồm các tác vụ, không gì khác hơn là một mảng từ điển đơn giản và đơn giản. Mỗi mục trong mảng có các trường mà chúng tôi đã xác định ở trên cho các tác vụ của mình

Thay vì điểm vào

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
4, giờ đây chúng ta có hàm
$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
5 được liên kết với URI
$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
6 và chỉ dành cho phương thức HTTP
$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
7

Phản hồi của chức năng này không phải là văn bản, chúng tôi hiện đang trả lời bằng dữ liệu JSON, mà chức năng

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
8 của Flask tạo ra cho chúng tôi từ cấu trúc dữ liệu của chúng tôi

Sử dụng trình duyệt web để kiểm tra dịch vụ web không phải là ý tưởng tốt nhất vì trình duyệt web không thể dễ dàng tạo tất cả các loại yêu cầu HTTP. Thay vào đó, chúng tôi sẽ sử dụng curl. Nếu bạn chưa cài đặt

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
9, hãy tiếp tục và cài đặt nó ngay bây giờ

Bắt đầu dịch vụ web giống như cách chúng tôi đã bắt đầu ứng dụng mẫu, bằng cách chạy

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
1. Sau đó mở một cửa sổ giao diện điều khiển mới và chạy lệnh sau

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}

Chúng tôi vừa gọi một chức năng trong dịch vụ RESTful của mình

Bây giờ, hãy viết phiên bản thứ hai của phương thức GET cho tài nguyên nhiệm vụ của chúng ta. Nếu bạn nhìn vào bảng ở trên, đây sẽ là bảng được sử dụng để trả về dữ liệu của một tác vụ

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
7

Chức năng thứ hai này thú vị hơn một chút. Ở đây, chúng tôi lấy id của tác vụ trong URL và Flask dịch nó thành đối số

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
71 mà chúng tôi nhận được trong hàm

Với đối số này, chúng tôi tìm kiếm mảng

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
72 của chúng tôi. Nếu id mà chúng tôi đã cung cấp không tồn tại trong cơ sở dữ liệu của chúng tôi thì chúng tôi sẽ trả về mã lỗi 404 quen thuộc, theo thông số kỹ thuật HTTP có nghĩa là "Không tìm thấy tài nguyên", đây chính xác là trường hợp của chúng tôi

Nếu chúng tôi tìm thấy nhiệm vụ thì chúng tôi chỉ cần đóng gói nó dưới dạng JSON với

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
8 và gửi nó dưới dạng phản hồi, giống như chúng tôi đã làm trước đây cho toàn bộ bộ sưu tập

Đây là giao diện của hàm này khi được gọi từ

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
9

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
2

Khi chúng tôi yêu cầu id tài nguyên #2, chúng tôi nhận được nó, nhưng khi chúng tôi yêu cầu #3, chúng tôi nhận được lỗi 404. Điều kỳ lạ về lỗi này là nó quay lại với một thông báo HTML thay vì JSON, vì đó là cách Flask tạo phản hồi 404 theo mặc định. Vì đây là một dịch vụ web nên các ứng dụng khách sẽ yêu cầu chúng tôi luôn phản hồi bằng JSON, vì vậy chúng tôi cần cải thiện trình xử lý lỗi 404 của mình

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
3

Và chúng tôi nhận được phản hồi lỗi thân thiện với API hơn nhiều

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
4

Tiếp theo trong danh sách của chúng ta là phương thức

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
75, mà chúng ta sẽ sử dụng để chèn một mục mới vào cơ sở dữ liệu tác vụ của mình

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
0

Thêm một nhiệm vụ mới cũng khá dễ dàng.

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
76 sẽ có dữ liệu yêu cầu, nhưng chỉ khi nó được đánh dấu là JSON. Nếu dữ liệu không có ở đó hoặc nếu có nhưng chúng tôi đang thiếu một mục
$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
77 thì chúng tôi sẽ trả về mã lỗi 400, đây là mã của yêu cầu không hợp lệ

Sau đó, chúng tôi tạo một từ điển tác vụ mới, sử dụng id của tác vụ cuối cùng cộng với một (một cách rẻ tiền để đảm bảo các id duy nhất trong cơ sở dữ liệu đơn giản của chúng tôi). Chúng tôi cho phép trường

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
78 bị thiếu và chúng tôi cho rằng trường
$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
79 sẽ luôn bắt đầu được đặt thành
$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
20

Chúng tôi nối tác vụ mới vào mảng

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
72 của mình, sau đó trả lời ứng dụng khách bằng tác vụ đã thêm và gửi lại mã trạng thái 201, mà HTTP xác định là mã cho "Đã tạo"

Để kiểm tra chức năng mới này, chúng ta có thể sử dụng lệnh

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
9 sau

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
1

Ghi chú. nếu bạn đang dùng Windows và sử dụng phiên bản Cygwin của

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
9 từ
$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
24 thì lệnh trên sẽ hoạt động tốt. Tuy nhiên, nếu bạn đang sử dụng phiên bản gốc của
$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
9 từ dấu nhắc lệnh thông thường thì cần thực hiện một bước nhảy nhỏ để gửi dấu ngoặc kép bên trong phần thân của yêu cầu

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
2

Về cơ bản trên Windows, bạn phải sử dụng dấu ngoặc kép để đặt phần thân của yêu cầu, sau đó bên trong nó, bạn thoát khỏi dấu ngoặc kép bằng cách viết ba trong số chúng theo thứ tự

Tất nhiên sau khi yêu cầu này hoàn thành, chúng tôi có thể nhận được danh sách các tác vụ được cập nhật

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
3

Hai chức năng còn lại của dịch vụ web của chúng tôi được hiển thị bên dưới

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
4

Hàm

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
26 sẽ không có gì bất ngờ. Đối với chức năng
$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
27, chúng tôi đang cố gắng ngăn chặn lỗi bằng cách kiểm tra toàn diện các đối số đầu vào. Chúng tôi cần đảm bảo rằng mọi thứ mà khách hàng cung cấp cho chúng tôi đều ở định dạng dự kiến ​​trước khi chúng tôi kết hợp nó vào cơ sở dữ liệu của mình

Một lệnh gọi hàm cập nhật nhiệm vụ #2 đang được thực hiện sẽ được thực hiện như sau

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
5

Cải thiện giao diện dịch vụ web

Vấn đề với thiết kế hiện tại của API là các máy khách buộc phải xây dựng URI từ các mã định danh tác vụ được trả về. Bản thân điều này khá dễ dàng, nhưng nó gián tiếp buộc khách hàng biết cách các URI này cần được xây dựng và điều này sẽ ngăn chúng tôi thực hiện các thay đổi đối với URI trong tương lai

Thay vì trả về id tác vụ, chúng ta có thể trả về URI đầy đủ điều khiển tác vụ để khách hàng có sẵn URI để sử dụng. Đối với điều này, chúng ta có thể viết một hàm trợ giúp nhỏ để tạo phiên bản "công khai" của tác vụ để gửi cho khách hàng

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
6

Tất cả những gì chúng ta đang làm ở đây là lấy một nhiệm vụ từ cơ sở dữ liệu của chúng ta và tạo một nhiệm vụ mới có tất cả các trường ngoại trừ

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
28, trường này được thay thế bằng một trường khác có tên là
$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
29, được tạo bằng
$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
30 của Flask

Khi chúng tôi trả về danh sách các nhiệm vụ, chúng tôi sẽ chuyển chúng qua chức năng này trước khi gửi chúng cho khách hàng

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
7

Vì vậy, bây giờ đây là những gì khách hàng nhận được khi truy xuất danh sách các tác vụ

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
8

Chúng tôi áp dụng kỹ thuật này cho tất cả các chức năng khác và với điều này, chúng tôi đảm bảo rằng khách hàng luôn nhìn thấy URI thay vì id

Bảo mật một dịch vụ web RESTful

Bạn có thể tin rằng chúng tôi đã hoàn thành? . Dịch vụ của chúng tôi mở cửa cho bất kỳ ai và đó là một điều tồi tệ

Chúng tôi có một dịch vụ web hoàn chỉnh có thể quản lý danh sách việc cần làm của chúng tôi, nhưng dịch vụ ở trạng thái hiện tại được mở cho bất kỳ khách hàng nào. Nếu một người lạ tìm ra cách API của chúng tôi hoạt động, họ có thể viết một ứng dụng khách mới có thể truy cập dịch vụ của chúng tôi và làm rối tung dữ liệu của chúng tôi

Hầu hết các hướng dẫn ở cấp độ đầu vào đều bỏ qua bảo mật và dừng tại đây. Theo tôi đây là một vấn đề nghiêm trọng cần được giải quyết

Cách dễ nhất để bảo mật dịch vụ web của chúng tôi là yêu cầu khách hàng cung cấp tên người dùng và mật khẩu. Trong một ứng dụng web thông thường, bạn sẽ có một biểu mẫu đăng nhập đăng thông tin đăng nhập và tại thời điểm đó, máy chủ sẽ tạo phiên để người dùng đã đăng nhập tiếp tục làm việc, với id phiên được lưu trữ trong cookie trong trình duyệt máy khách. Thật không may, làm điều đó ở đây sẽ vi phạm yêu cầu không trạng thái của REST, vì vậy thay vào đó chúng tôi phải yêu cầu khách hàng gửi thông tin xác thực của họ với mọi yêu cầu họ gửi cho chúng tôi

Với REST, chúng tôi luôn cố gắng tuân thủ giao thức HTTP nhiều nhất có thể. Bây giờ chúng ta cần triển khai xác thực, chúng ta nên làm như vậy trong ngữ cảnh của HTTP, cung cấp hai hình thức xác thực được gọi là Cơ bản và Thông báo

Có một tiện ích mở rộng Flask nhỏ có thể trợ giúp việc này, không ai khác ngoài bạn thực sự viết. Vì vậy, hãy tiếp tục và cài đặt Flask-HTTPAuth

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
9

Giả sử chúng ta muốn dịch vụ web của mình chỉ có thể truy cập được bằng tên người dùng

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
31 và mật khẩu
$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
32. Chúng tôi có thể thiết lập xác thực HTTP cơ bản như sau

#!flask/bin/python
from flask import Flask

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run(debug=True)
0

Hàm

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
33 là hàm gọi lại mà tiện ích mở rộng sẽ sử dụng để lấy mật khẩu cho một người dùng nhất định. Trong một hệ thống phức tạp hơn, chức năng này có thể kiểm tra cơ sở dữ liệu người dùng, nhưng trong trường hợp này, chúng tôi chỉ có một người dùng nên không cần điều đó

Cuộc gọi lại

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
34 sẽ được tiện ích mở rộng sử dụng khi cần gửi lại mã lỗi trái phép cho máy khách. Giống như chúng tôi đã làm với các mã lỗi khác, ở đây chúng tôi tùy chỉnh phản hồi để chứa JSON thay vì HTML

Với thiết lập hệ thống xác thực, tất cả những gì còn lại là chỉ ra chức năng nào cần được bảo vệ, bằng cách thêm trình trang trí

$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
35. Ví dụ

#!flask/bin/python
from flask import Flask

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run(debug=True)
1

Nếu bây giờ chúng ta thử gọi hàm này với

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
9 thì đây là những gì chúng ta nhận được

#!flask/bin/python
from flask import Flask

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run(debug=True)
2

Để có thể gọi chức năng này, chúng tôi phải gửi thông tin đăng nhập của mình

#!flask/bin/python
from flask import Flask

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run(debug=True)
3

Tiện ích mở rộng xác thực cho phép chúng tôi tự do lựa chọn chức năng nào trong dịch vụ được mở và chức năng nào được bảo vệ

Để đảm bảo thông tin đăng nhập được bảo mật, dịch vụ web phải được hiển thị trong máy chủ Bảo mật HTTP (i. e. https. //. ) vì điều này mã hóa tất cả thông tin liên lạc giữa máy khách và máy chủ, đồng thời ngăn không cho bên thứ ba nhìn thấy thông tin đăng nhập xác thực khi chuyển tiếp

Thật không may, các trình duyệt web có thói quen khó chịu là hiển thị hộp thoại đăng nhập xấu khi yêu cầu quay lại với mã lỗi 401. Điều này xảy ra ngay cả đối với các yêu cầu nền, vì vậy nếu chúng tôi triển khai ứng dụng khách trình duyệt web với máy chủ web hiện tại của mình, chúng tôi sẽ cần vượt qua các vòng để ngăn trình duyệt hiển thị hộp thoại xác thực của chúng và để ứng dụng khách của chúng tôi xử lý đăng nhập

Một thủ thuật đơn giản để đánh lạc hướng trình duyệt web là trả về mã lỗi không phải 401. Một mã lỗi thay thế được nhiều người ưa chuộng là 403, đó là lỗi "Bị cấm". Mặc dù đây là một lỗi đủ gần, nhưng nó vi phạm tiêu chuẩn HTTP, vì vậy đây không phải là điều đúng đắn nếu cần tuân thủ đầy đủ. Đặc biệt, đây sẽ là một ý tưởng tồi nếu ứng dụng khách không phải là trình duyệt web. Nhưng đối với trường hợp máy chủ và máy khách được phát triển cùng nhau, nó sẽ tiết kiệm được rất nhiều rắc rối. Thay đổi đơn giản mà chúng ta có thể thực hiện để thực hiện thủ thuật này là thay thế 401 bằng 403

#!flask/bin/python
from flask import Flask

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run(debug=True)
4

Tất nhiên, nếu chúng tôi làm điều này, chúng tôi cũng sẽ cần ứng dụng khách để tìm lỗi 403

cải tiến có thể

Có một số cách mà dịch vụ web nhỏ mà chúng tôi đã xây dựng ngày nay có thể được cải thiện

Đối với người mới bắt đầu, một dịch vụ web thực phải được hỗ trợ bởi cơ sở dữ liệu thực. Cấu trúc dữ liệu bộ nhớ mà chúng tôi đang sử dụng rất hạn chế về chức năng và không nên được sử dụng cho ứng dụng thực

Một lĩnh vực khác có thể cải tiến là xử lý nhiều người dùng. Nếu hệ thống hỗ trợ nhiều người dùng, thông tin đăng nhập xác thực do khách hàng gửi có thể được sử dụng để lấy danh sách công việc cụ thể của người dùng. Trong một hệ thống như vậy, chúng tôi sẽ có tài nguyên thứ hai, đó sẽ là người dùng. Yêu cầu

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
75 trên tài nguyên người dùng sẽ đại diện cho người dùng mới đăng ký dịch vụ. Yêu cầu
$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
7 sẽ trả lại thông tin người dùng cho khách hàng. Yêu cầu
$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
39 sẽ cập nhật thông tin người dùng, có thể cập nhật địa chỉ email. Yêu cầu
$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
40 sẽ xóa tài khoản người dùng

Yêu cầu

$ curl -i http://localhost:5000/todo/api/v1.0/tasks
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT

{
  "tasks": [
    {
      "description": "Milk, Cheese, Pizza, Fruit, Tylenol",
      "done": false,
      "id": 1,
      "title": "Buy groceries"
    },
    {
      "description": "Need to find a good Python tutorial on the web",
      "done": false,
      "id": 2,
      "title": "Learn Python"
    }
  ]
}
7 truy xuất danh sách nhiệm vụ có thể được mở rộng theo một số cách. Đầu tiên, yêu cầu này có thể nhận các đối số phân trang tùy chọn để khách hàng có thể yêu cầu một phần của danh sách. Một cách khác để làm cho chức năng này hữu ích hơn là cho phép lọc theo các tiêu chí nhất định. Ví dụ: khách hàng có thể chỉ muốn xem các tác vụ đã hoàn thành hoặc chỉ các tác vụ có tiêu đề bắt đầu bằng chữ A. Tất cả các phần tử này có thể được thêm vào URL dưới dạng đối số

Sự kết luận

Mã hoàn chỉnh cho dịch vụ web To Do List có ở đây. https. //ý chính. github. com/miguelgrinberg/5614326

Tôi hy vọng đây là phần giới thiệu đơn giản và thân thiện về API RESTful. Nếu có đủ hứng thú, tôi có thể viết phần thứ hai cho bài viết này, trong đó chúng ta có thể phát triển một ứng dụng khách web đơn giản sử dụng dịch vụ này cho một ứng dụng To Do List hoàn chỉnh. Hãy cho tôi biết những gì bạn nghĩ dưới đây trong các ý kiến

CẬP NHẬT. Theo dõi hướng dẫn này hiện đang trực tuyến. Viết ứng dụng khách Javascript REST

CẬP NHẬT #2. Tôi đã viết một bài tiếp theo khác. Thiết kế API RESTful bằng Flask-RESTful

CẬP NHẬT #3*. Một bài viết tiếp theo có sẵn. Xác thực RESTful với Flask

Miguel

Xin chào và cảm ơn bạn đã ghé thăm blog của tôi. Nếu bạn thích bài viết này, vui lòng xem xét hỗ trợ công việc của tôi trên blog này trên Patreon

Microservice có thể là API REST không?

Một trong những loại API phổ biến nhất để xây dựng các ứng dụng vi dịch vụ được gọi là “RESTful API” hoặc “REST API. ” API REST là một tiêu chuẩn phổ biến đối với các nhà phát triển vì nó sử dụng các lệnh HTTP mà hầu hết các nhà phát triển đều quen thuộc và dễ dàng sử dụng.

Tôi có thể xây dựng API REST bằng Python không?

" Flask cho phép các nhà phát triển Python tạo API RESTful nhẹ . "

API REST trong ví dụ về Python là gì?

API REST cho phép người dùng truy cập dữ liệu dịch vụ web qua URL web công khai . API REST của Python là một API như vậy. Bạn có thể sử dụng URL này để nhận thông tin về một người dùng GitHub nhất định. Gửi yêu cầu HTTP tới một URL cụ thể và xử lý câu trả lời là cách bạn lấy dữ liệu từ API REST của Python.

API REST có giống với Microservice không?

Cách dễ hiểu nhất về microservice là chúng chia nhỏ ứng dụng thành các phần nhỏ hơn hoạt động đồng thời. Vi dịch vụ là các khối ứng dụng của bạn và thực hiện các dịch vụ khác nhau, trong khi API REST hoạt động như chất kết dính hoặc cầu nối tích hợp các vi dịch vụ riêng biệt này .