Web API 的工作通常与 HTTP 动词紧密相关,所以这使得实现这样一个基于 MethodView
类的 API 很有意义。也就是说,你会注意到 大多数时候, API 需要不同的 URL 规则来访问相同的方法视图。譬如,想象一种 情况,你在 web 上暴露一个用户对象:
URL | HTTP 方法 | 描述 |
/users/
|
GET
|
获得全部用户的列表 |
/users/
|
POST
|
创建一个新用户 |
/users/<id>
|
GET
|
显示某个用户 |
/users/<id>
|
PUT
|
更新某个用户 |
/users/<id>
|
DELETE
|
删除某个用户 |
那么,你会想用 MethodView
做什么?诀窍是利用你可以 对相同的视图提供多个规则的事实。
让我们假设这时视图看起来是这个样子:
class UserAPI(MethodView):
def get(self, user_id):
if user_id is None:
# return a list of users
pass
else:
# expose a single user
pass
def post(self):
# create a new user
pass
def delete(self, user_id):
# delete a single user
pass
def put(self, user_id):
# update a single user
pass
如此,我们怎样把它挂载到路由系统中?添加两条规则,并且为每条规则显式地 指出 HTTP 方法:
user_view = UserAPI.as_view("user_api")
app.add_url_rule("/users/", defaults={"user_id": None},
view_func=user_view, methods=["GET",])
app.add_url_rule("/users/", view_func=user_view, methods=["POST",])
app.add_url_rule("/users/<int:user_id>", view_func=user_view,
methods=["GET", "PUT", "DELETE"])
如果你有许多看起来类似的 API ,你可以重构上述的注册代码:
def register_api(view, endpoint, url, pk="id", pk_type="int"):
view_func = view.as_view(endpoint)
app.add_url_rule(url, defaults={pk: None},
view_func=view_func, methods=["GET",])
app.add_url_rule(url, view_func=view_func, methods=["POST",])
app.add_url_rule("%s<%s:%s>" % (url, pk_type, pk), view_func=view_func,
methods=["GET", "PUT", "DELETE"])
register_api(UserAPI, "user_api", "/users/", pk="user_id")
为了在请求/响应周期之外测试基于类的视图,你必须确保它们配置正确,在实例化之后调用 setup()。例如,假设基于类的视图如...
简介dynamic-datasource-spring-boot-starter是一个基于springboot的快速集成多数据源的启动器。其支持Jdk1.7+,Spring...
动态SQL中的插入脚本语言MyBatis从3.2版本开始支持插入脚本语言,这允许你插入一种语言驱动,并基于这种语言来编写动态SQL查询语...
Spring 有可能成为所有企业应用程序的一站式服务点,然而,Spring 是模块化的,允许你挑选和选择适用于你的模块,不必要把剩余部...
JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。语法格式如下: %@ directive attribute="value" %指令可...
Swift 字典Swift 字典用来存储无序的相同类型数据的集合,Swift 数组会强制检测元素的类型,如果类型不同则会报错。Swift 字典每...
基准测试Rust支持基准测试来测试用户代码的性能。我们来看一下 src/lib.rs 的性能如何。`#![feature(test)]extern crate test;pu...
本节的内容将提供常用的一些MATLAB命令。在之前的篇章中我们已经知道了MATLAB数值计算和数据可视化是一个交互式程序,在它的命令...