Python Falcon - 资源类



Falcon 的设计借鉴了 REST 架构风格的几个关键概念。REST 代表表述性状态转移(Representational State Transfer)。REST 定义了 Web 应用程序的架构应该如何运行。

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

服务器上的资源应该只有一个统一资源标识符 (URI)。它只标识资源;它不指定对该资源执行什么操作。相反,用户从一组标准方法中选择。HTTP 动词或方法用于对资源进行操作。POST、GET、PUT 和 DELETE 方法分别执行创建、读取、更新和删除操作。

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

Python Falcon Resource

每个资源类都定义了各种“响应器”方法,每个方法对应资源允许的一种 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 响应。此对象的属性和方法设置状态、标头和主体数据。它还公开了一个类似字典的上下文属性,用于将任意数据传递给 Hook 和其他中间件方法。

请注意,上述示例中的HelloResource只是一个普通的 Python 类。它可以有任意名称;但是,约定是将其命名为xxxResource

广告