仅使用 Google App Engine、webapp2 和 Python 创建一个 API?

Creating an API with just Google App Engine, webapp2 and Python?

是否可以在 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 发出 restful 请求时,它可以返回数据对象(而不是呈现的 html 页面)。

这可行或推荐吗?

您不必 return 一个 HTML 页面。您可以 return 一个 JSON,或者甚至只是一个字符串,因为这是您托管的代码。您可以使用可以响应 REST 调用的 App Engine 轻松发送 URL。

您可以从查询中构建一个 python 列表或字典对象,然后将其作为 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)