仅使用 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?的主要内容,如果未能解决你的问题,请参考以下文章

Google App Engine 上的 web.py

Google App Engine - 多个域

将 GCP App Engine 限制为仅使用 1 个单元的 app engine flex core

使用 Python 在 Google App Engine 上提供 Gtalk 服务

我可以使用 Google App Engine 作为 XMPP 网关吗

在 Google App Engine 上为用 Python 编写的 Qualtrics 创建 Web 服务