gpt4 book ai didi

python - webapp2 + RESTful API

转载 作者:行者123 更新时间:2023-12-01 07:14:02 24 4
gpt4 key购买 nike

我正在 Google App Engine + Python + webapp2 上构建。构建现代 Web 应用程序的一部分需要一个 Restful API。我知道我可以使用 Flask 来完成此操作,但是我想探索在 webapp2 上构建 REST API 的可能性。

在 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 模式,因为请求方法是在路径(/delete、/edit、/new)中指定的,而不是在请求 header 中指定的。

解决方案是创建一个接收所有请求类型的处理程序类吗?例如:

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 构建 REST API 的正确方法吗?

最佳答案

您的路径是正确的,但您应该继续处理网址中的 post_id 并执行以下操作:

class PostHandler(webapp2.RequestHandler):
def get(self, post_id=None):
if post_id:
# handle Fetching a single post object
else:
# handle Queries

def post(self, post_id=None):
if post_id:
self.abort(405)
# handle creating a single post object

def put(self, post_id=None):
if post_id:
# handle updating a single post object
else:
self.abort(405)


def delete(self, post_id=None):
if post_id:
# handle deleting a single post object
else:
self.abort(405)


app = webapp2.WSGIApplication([
('/post/<post_id>/', PostHandler),
('/post/', PostHandler),
])

此外,像 voscausa 建议的那样将 HTTP 动词放入请求负载中并不符合 RESTful API 设计。

关于python - webapp2 + RESTful API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58068747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com