CherryPy - Dịch vụ web
Dịch vụ web là một tập hợp các thành phần dựa trên web giúp trao đổi dữ liệu giữa các ứng dụng hoặc hệ thống, bao gồm các giao thức và tiêu chuẩn mở. Nó có thể được xuất bản, sử dụng và tìm thấy trên web.
Các dịch vụ web thuộc nhiều loại khác nhau như RWS (RESTfUL Web Service), WSDL, SOAP và nhiều loại khác.
REST - Chuyển trạng thái đại diện
Một loại giao thức truy cập từ xa, chuyển trạng thái từ máy khách đến máy chủ có thể được sử dụng để thao tác trạng thái thay vì gọi các thủ tục từ xa.
Không xác định bất kỳ mã hóa hoặc cấu trúc cụ thể nào và cách trả về các thông báo lỗi hữu ích.
Sử dụng "động từ" HTTP để thực hiện các hoạt động chuyển trạng thái.
Các tài nguyên được xác định duy nhất bằng cách sử dụng URL.
Nó không phải là một API mà thay vào đó là một lớp vận chuyển API.
REST duy trì danh pháp của các tài nguyên trên mạng và cung cấp cơ chế thống nhất để thực hiện các hoạt động trên các tài nguyên này. Mỗi tài nguyên được xác định bởi ít nhất một mã định danh. Nếu cơ sở hạ tầng REST được triển khai với cơ sở của HTTP, thì các số nhận dạng này được gọi làUniform Resource Identifiers (URIs).
Sau đây là hai tập con phổ biến của tập hợp URI:
Tập hợp con | Hình thức đầy đủ | Thí dụ |
---|---|---|
URL | Đồng phục nhân viên | http://www.gmail.com/ |
URN | Tên tài nguyên thống nhất | urn: isbn: 0-201-71088-9 urn: uuid: 13e8cf26-2a25-11db-8693-000ae4ea7d46 |
Trước khi tìm hiểu việc triển khai kiến trúc CherryPy, chúng ta hãy tập trung vào kiến trúc của CherryPy.
CherryPy bao gồm ba thành phần sau:
cherrypy.engine - Nó kiểm soát quá trình khởi động / xé nhỏ và xử lý sự kiện.
cherrypy.server - Nó cấu hình và điều khiển máy chủ WSGI hoặc HTTP.
cherrypy.tools - Một hộp công cụ gồm các tiện ích trực giao để xử lý một yêu cầu HTTP.
Giao diện REST thông qua CherryPy
Dịch vụ web RESTful triển khai từng phần của kiến trúc CherryPy với sự trợ giúp của những điều sau:
- Authentication
- Authorization
- Structure
- Encapsulation
- Xử lý lỗi
Xác thực
Xác thực giúp xác thực những người dùng mà chúng tôi đang tương tác. CherryPy bao gồm các công cụ để xử lý từng phương thức xác thực.
def authenticate():
if not hasattr(cherrypy.request, 'user') or cherrypy.request.user is None:
# < Do stuff to look up your users >
cherrypy.request.authorized = False # This only authenticates.
Authz must be handled separately.
cherrypy.request.unauthorized_reasons = []
cherrypy.request.authorization_queries = []
cherrypy.tools.authenticate = \
cherrypy.Tool('before_handler', authenticate, priority=10)
Hàm authenticate () ở trên sẽ giúp xác thực sự tồn tại của khách hàng hoặc người dùng. Các công cụ tích hợp giúp hoàn thành quy trình một cách có hệ thống.
Ủy quyền
Ủy quyền giúp duy trì sự tỉnh táo của quy trình thông qua URI. Quá trình này cũng giúp biến đổi các đối tượng theo mã thông báo của người dùng.
def authorize_all():
cherrypy.request.authorized = 'authorize_all'
cherrypy.tools.authorize_all = cherrypy.Tool('before_handler', authorize_all, priority=11)
def is_authorized():
if not cherrypy.request.authorized:
raise cherrypy.HTTPError("403 Forbidden",
','.join(cherrypy.request.unauthorized_reasons))
cherrypy.tools.is_authorized = cherrypy.Tool('before_handler', is_authorized,
priority = 49)
cherrypy.config.update({
'tools.is_authorized.on': True,
'tools.authorize_all.on': True
})
Các công cụ ủy quyền tích hợp giúp xử lý các quy trình một cách có hệ thống, như đã đề cập trong ví dụ trước.
Kết cấu
Duy trì cấu trúc của API giúp giảm tải công việc ánh xạ URI của ứng dụng. Luôn luôn cần thiết để giữ cho API có thể khám phá và sạch sẽ. Cấu trúc cơ bản của API cho khung CherryPy phải có những điều sau:
- Tài khoản và Người dùng
- Autoresponder
- Contact
- File
- Folder
- Danh sách và trường
- Tin nhắn và hàng loạt
Đóng gói
Tính năng đóng gói giúp tạo ra API nhẹ, con người có thể đọc được và có thể truy cập được đối với các ứng dụng khách khác nhau. Danh sách các mục cùng với Tạo, Truy xuất, Cập nhật và Xóa yêu cầu đóng gói API.
Xử lý lỗi
Quá trình này quản lý các lỗi, nếu có, nếu API không thực thi theo bản năng cụ thể. Ví dụ: 400 dành cho Yêu cầu không hợp lệ và 403 dành cho yêu cầu trái phép.
Thí dụ
Hãy coi phần sau là một ví dụ cho lỗi cơ sở dữ liệu, xác thực hoặc ứng dụng.
import cherrypy
import json
def error_page_default(status, message, traceback, version):
ret = {
'status': status,
'version': version,
'message': [message],
'traceback': traceback
}
return json.dumps(ret)
class Root:
_cp_config = {'error_page.default': error_page_default}
@cherrypy.expose
def index(self):
raise cherrypy.HTTPError(500, "Internal Sever Error")
cherrypy.quickstart(Root())
Đoạn mã trên sẽ tạo ra kết quả sau:
Quản lý API (Giao diện lập trình ứng dụng) dễ dàng thông qua CherryPy vì các công cụ truy cập được tích hợp sẵn.
Phương thức HTTP
Danh sách các phương thức HTTP hoạt động trên các tài nguyên như sau:
S. không | Phương thức & hoạt động HTTP |
---|---|
1. | HEAD Truy xuất siêu dữ liệu tài nguyên. |
2. | GET Truy xuất nội dung và siêu dữ liệu tài nguyên. |
3. | POST Yêu cầu máy chủ tạo một tài nguyên mới bằng cách sử dụng dữ liệu trong phần thân yêu cầu. |
4. | PUT Yêu cầu máy chủ thay thế tài nguyên hiện có bằng tài nguyên được đính kèm trong nội dung yêu cầu. |
5. | DELETE Yêu cầu máy chủ xóa tài nguyên được xác định bởi URI đó. |
6. | OPTIONS Yêu cầu máy chủ trả lại thông tin chi tiết về các khả năng trên toàn cầu hoặc cụ thể đối với một tài nguyên. |
Giao thức xuất bản Atom (APP)
APP đã phát sinh từ cộng đồng Atom như một giao thức cấp ứng dụng trên HTTP để cho phép xuất bản và chỉnh sửa tài nguyên web. Đơn vị thông báo giữa máy chủ APP và máy khách dựa trên định dạng tài liệu XML của Atom.
Giao thức xuất bản Atom xác định một tập hợp các hoạt động giữa dịch vụ APP và tác nhân người dùng sử dụng HTTP và các cơ chế của nó và định dạng tài liệu XML Atom làm đơn vị thông báo.
Trước tiên, APP xác định tài liệu dịch vụ, tài liệu này cung cấp cho tác nhân người dùng URI của các tập hợp khác nhau được cung cấp bởi dịch vụ APP.
Thí dụ
Hãy để chúng tôi lấy một ví dụ để chứng minh cách hoạt động của APP -
<?xml version = "1.0" encoding = "UTF-8"?>
<service xmlns = "http://purl.org/atom/app#" xmlns:atom = "http://www.w3.org/2005/Atom">
<workspace>
<collection href = "http://host/service/atompub/album/">
<atom:title> Albums</atom:title>
<categories fixed = "yes">
<atom:category term = "friends" />
</categories>
</collection>
<collection href = "http://host/service/atompub/film/">
<atom:title>Films</atom:title>
<accept>image/png,image/jpeg</accept>
</collection>
</workspace>
</service>
APP chỉ định cách thực hiện các hoạt động CRUD cơ bản chống lại thành viên của tập hợp hoặc chính tập hợp đó bằng cách sử dụng các phương thức HTTP như được mô tả trong bảng sau:
Hoạt động | Phương thức HTTP | Mã trạng thái | Nội dung |
---|---|---|---|
Lấy lại | ĐƯỢC | 200 | Mục nhập Atom đại diện cho tài nguyên |
Tạo nên | BÀI ĐĂNG | 201 | URI của tài nguyên mới được tạo qua các tiêu đề Vị trí và Nội dung-Vị trí |
Cập nhật | ĐẶT | 200 | Mục nhập Atom đại diện cho tài nguyên |
Xóa bỏ | XÓA BỎ | 200 | không ai |