我正在googleappengine+Python+webapp2上构建。构建现代web应用程序的一部分需要restfulapi。我知道我可以用Flask
来实现这一点,但是我想探索在webapp2
上构建restapi的可能性。你知道吗
在webapp2上,请求的处理方式如下:
app = webapp2.WSGIApplication([
('/post/new', CreatePost),
('/post/([a-z0-9]+)', ViewPost),
('/post/([a-z0-9]+)/edit', EditPost),
('/post/([a-z0-9]+)/delete', DeletePost)
])
注意:([a-z0-9]+)
是表示post_id
的正则表达式
上面的请求处理程序不遵循RESTful模式,因为请求methods
是在路径(/delete,/edit,/new)中指定的,而不是在请求头中指定的。你知道吗
解决方案是创建一个接收所有请求类型的处理程序类吗?例如:
class PostHandler(webapp2.RequestHandler):
def get(self):
# handle GET requests
def post(self):
# handle POST requests
def put(self):
# handle PUT requests
def delete(self):
# handle DELETE requests
app = webapp2.WSGIApplication([
('/post/?', PostHandler)
])
在本例中,所有/post
路径都由PostHandler处理。post_id
不再用于此模式,因为它将在请求主体中提交。你知道吗
这是用webapp2构建restapi的正确方法吗?你知道吗
您的路径是正确的,但是您应该继续处理url中的
post_id
,并按如下方式操作:此外,将HTTP动词放在请求负载中(如
voscausa
)并不符合restfulapi设计。你知道吗我们应该扩展
webapp2.RequestHandler
,并将该扩展用作RESTfulHandler
的新基类,然后还可以出于特定目的将RESTfulHandler
扩展到RESTfulPostHandler
。通过这种方式,我们还可以处理新的方法或工作,例如头中的jwt(jsonwebtoken)、授权和希望在头中处理的其他属性。你知道吗顺便说一句,“post”可能不是项目/对象的最佳名称,因为它很容易与http动词“post”混淆。如果我是您,我会将其重命名为“item”或类似名称,并使用
RESTfulItemHandler
扩展webapp2请求处理程序。有很多东西你想在处理程序之间共享,比如在基类中共享功能很方便。你知道吗相关问题 更多 >
编程相关推荐