繁体   English   中英

云端点和App Engine

[英]Cloud Endpoints and App Engine

我刚刚开始使用Google Cloud,现在正在创建一个iOS应用,以便通过移动后端与Google Cloud服务进行交互。 我正在使用Python编写App Engine的后端。 我已经完成了基于端点创建API的教程-但我有一个问题。

我必须先创建Cloud Endpoints API,然后在App Engine上创建一个应用程序吗? 基本上,我希望能够在我的iOS应用程序上注册帐户,然后调用一个API,然后该API使用Google数据存储来存储帐户详细信息。 通过查看教程(两个云端点,然后一个访客留言簿),我是否打算在端点api中公开Goog​​le数据存储,云存储等? 还是可以链接到其他已完成的应用程序?

抱歉,这听起来有点愚蠢,但我只想确定一下!

提前致谢。

简而言之,您的Cloud Endpoints API 您的应用程序。 有关Cloud Endpoints的一些文档可能会有些混乱(或含糊),但是在服务器端,实际上是一堆Python装饰器或Java批注,使您可以将应用程序逻辑公开为REST API。

我发现Cloud Endpoints的Java实现比Python更加直观,这需要更多的工作来对对象进行反序列化。 您可以看一下endpoints_proto_datastore.ndb.EndpointsModel ,它可能会使方程式中的一些样板内容(定义消息)消失。

本质上,在编写API时,每个端点都映射到python函数。 在该函数内,您可以执行自己喜欢的操作,但通常可以是:

  1. 反序列化您发布的JSON,进行验证,然后将一些实体写入数据存储区(或Cloud SQL,BigTable,无论在何处)。

  2. 从数据存储区读取一个或多个实体,并将其序列化为JSON,然后将其返回给客户端。

例如,您可以将API(端点函数的整个集合)定义为

@endpoints.api(name='cafeApi', version='v1', description='Cafe API', audiences=[endpoints.API_EXPLORER_CLIENT_ID])
class CafeApi(remote.Service):
    # endpoints here

例如,您可能有一个到达附近咖啡馆的终点:

@endpoints.method(GEO_RESOURCE, CafeListResponse, path='cafes/nearby', http_method='GET', name='cafes.nearby')
def get_nearby_cafes(self, request):
    """Get cafes close to specified lat,long"""
    cafes = list()
    for c in search.get_nearby_cafes(request.lat, request.lon):
        cafes.append(c.response_message())

    return CafeListResponse(cafes=cafes)

这里有两点要强调。 使用Python Endpoints实现,您需要定义资源和消息类-它们用于封装请求数据和响应主体。

因此,在上面的示例中, GEO_RESOURCE封装了创建GeoPoint所需的字段(因此我们可以使用Search API按位置进行搜索,但您可能只是在数据存储区中搜索5星评分的Cafes):

    GEO_RESOURCE = endpoints.ResourceContainer(
        message_types.VoidMessage,
        lat=messages.FloatField(1, required=True),
        lon=messages.FloatField(2, required=True)
    )

并且CafeListResponse只会封装一个CafeResponse对象list (使用Cloud Endpoints,您将返回一个对象):

class CafeListResponse(messages.Message):
    locations = messages.MessageField(CafeResponse, 1, required=False, repeated=True)

其中, CafeResponse是一条消息,它定义了您希望如何通过API序列化对象(通常是数据存储区实体)。 例如,

class LocationResponse(messages.Message):
    id = messages.StringField(1, required=False)
    coordinates = messages.MessageField(GeoMessage, 3, required=True)
    name = messages.StringField(4, required=False)

使用该端点签名,您可以通过/cafeApi/v1/cafes/nearby?lat=...&lon=...上的HTTP GET或使用带有cafeApi.cafes.nearby( ...)。

就个人而言,我发现Flask在使用Python创建REST API时更加灵活。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM