【问题标题】:Creating an API with just Google App Engine, webapp2 and Python?仅使用 Google App Engine、webapp2 和 Python 创建 API?
【发布时间】: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 页面)。

这可能或推荐吗?

【问题讨论】:

    标签: python google-app-engine google-cloud-platform google-cloud-python


    【解决方案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。

    【讨论】:

    • 如果我们要发布数据怎么办?我们应该怎么做?如果您愿意,您会在回答中举一个例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多