Python Falcon - 资源类

Falcon 的设计借鉴了 REST 架构风格的几个关键概念。 REST 代表 关系状态传输。 REST 定义了 Web 应用程序架构的行为方式。

REST 是一种基于资源的架构。 在这里,REST 服务器托管的所有内容,无论是文件、图像还是数据库表中的行,都被视为资源,可能有多种表示形式。 REST API 提供了对这些资源的可控访问,以便客户端可以检索和修改它们。

服务器资源应该只有一个统一资源标识符(URI)。 它只标识资源; 它没有指定对该资源采取什么行动。 取而代之的是,用户从一组标准方法中进行选择。 用于资源操作的 HTTP 谓词或方法。 POST、GET、PUT 和 DELETE 方法分别执行 CREATE、READ、UPDATE 和 DELETE 操作。

Falcon 使用普通的 Python 类来表示资源。 这样的类在您的应用程序中充当控制器。 它将传入的请求转换为一个或多个内部操作,然后根据这些操作的结果组成一个响应返回给客户端。

Python Falcon 资源

每个资源类都定义了各种"响应者" 方法,资源允许的每个 HTTP 方法都有一个。 响应程序名称以 "on_" 开头,并根据它们处理的 HTTP 方法命名,如 on_get()、on_post()、on_put() 等。

在上面使用的 hellofalcon.py 示例代码中,HelloResource(资源类)有一个 on_get() 响应程序方法。 响应者必须始终至少定义两个参数来接收 Request 和 Response 对象。

import falcon
class HelloResource:
   def on_get(self, req, resp):
      """Handles GET requests"""
      resp.status = falcon.HTTP_200
      resp.content_type = falcon.MEDIA_TEXT
      resp.text = (
         'Hello World'
      )

对于 ASGI 应用程序,响应者必须是协程函数,即必须使用 async 关键字定义。

class HelloResource:
   async def on_get(self, req, resp):
      """Handles GET requests"""
      resp.status = falcon.HTTP_200
      resp.content_type = falcon.MEDIA_TEXT
      resp.text = (
         'Hello World'
      )

Request 对象 表示传入的 HTTP 请求。 可以通过此对象访问请求标头、查询字符串参数和与请求关联的其他元数据。

Response 对象表示应用程序对请求的 HTTP 响应。 此对象的属性和方法设置状态、标题和正文数据。 它还公开了一个类似字典的上下文属性,用于将任意数据传递给挂钩和其他中间件方法。

请注意,上例中的 HelloResource 只是一个普通的 Python 类。 它可以有任何名称; 然而,惯例是将其命名为xxxResource