仅使用 Google App Engine、webapp2 和 Python 创建 API?
Posted
技术标签:
【中文标题】仅使用 Google App Engine、webapp2 和 Python 创建 API?【英文标题】:Creating an API with just Google App Engine, webapp2 and Python? 【发布时间】:2018-08-25 20:45:46 【问题描述】:是否可以在 Google App Engine 上仅使用 webapp2 和 Python 创建 API?
比如让我的路由/post/123
由这个RequestHandler处理:
class ShowPosts(webapp2.RequestHandler):
def get(self):
posts = Post.query().fetch()
# return the post as data (JSON) here as response
当客户端向/post/123
发出宁静请求时,它可以返回数据对象(而不是呈现的 html 页面)。
这可能或推荐吗?
【问题讨论】:
【参考方案1】:您可以从查询中构建一个 python 列表或 dict 对象,然后将其作为 JSON 对象发送,并将其作为响应发送。试试这样的:
import json
posts = Post.query()
post_json = []
for post in posts:
post_dict =
'name' : post.name,
'city' : post.city,
'state': post.state
post_json.append( post_dict )
return json.dumps(post_json)
更新: OP 以POST
方法为例:
import json
class ShowPosts(webapp2.RequestHandler):
def get(self):
posts = Post.query()
post_json = []
for post in posts:
post_dict =
'name' : post.name,
'city' : post.city,
'state': post.state
post_json.append( post_dict )
return json.dumps(post_json)
def post(self):
posts = Post.query()
post_json = []
for post in posts:
post_dict =
'name' : post.name,
'city' : post.city,
'state': post.state
post_json.append( post_dict )
post_json.append(
'posted_name': self.request.get('name'),
'posted_msg': self.request.get('msg')
)
return json.dumps(post_json)
【讨论】:
感谢您提供这个演示如何处理 GET 方法的示例。 API 的另一部分应该能够处理其他 http 方法;我们如何配置它来处理 POST 或 DELETE 方法? 不确定我是否理解。处理 POST 方法是基本的。你应该阅读webapp2.readthedocs.io/en/latest/guide/request.html 我不想花时间做学生的作业。查看更新的答案。 需要注意的一点是,在使用 webapp2 处理带参数的 POST 请求时,我们使用 self.request.get('some_field'),而当我们的应用接收到 restful 的 post 请求时,它看起来像我们使用 self.request.body 访问发送的数据。【参考方案2】:您不必返回 HTML 页面。您可以返回 JSON,甚至只是一个字符串,因为它是您托管的代码。您可以使用可以响应 REST 调用的 App Engine 轻松发送 URL。
【讨论】:
如果我们要发布数据怎么办?我们应该怎么做?如果您愿意,您会在回答中举一个例子吗?以上是关于仅使用 Google App Engine、webapp2 和 Python 创建 API?的主要内容,如果未能解决你的问题,请参考以下文章
将 GCP App Engine 限制为仅使用 1 个单元的 app engine flex core
使用 Python 在 Google App Engine 上提供 Gtalk 服务