[英]Cloud Endpoints and App Engine
我刚刚开始使用Google Cloud,现在正在创建一个iOS应用,以便通过移动后端与Google Cloud服务进行交互。 我正在使用Python编写App Engine的后端。 我已经完成了基于端点创建API的教程-但我有一个问题。
我必须先创建Cloud Endpoints API,然后在App Engine上创建一个应用程序吗? 基本上,我希望能够在我的iOS应用程序上注册帐户,然后调用一个API,然后该API使用Google数据存储来存储帐户详细信息。 通过查看教程(两个云端点,然后一个访客留言簿),我是否打算在端点api中公开Google数据存储,云存储等? 还是可以链接到其他已完成的应用程序?
抱歉,这听起来有点愚蠢,但我只想确定一下!
提前致谢。
简而言之,您的Cloud Endpoints API 是您的应用程序。 有关Cloud Endpoints的一些文档可能会有些混乱(或含糊),但是在服务器端,实际上是一堆Python装饰器或Java批注,使您可以将应用程序逻辑公开为REST API。
我发现Cloud Endpoints的Java实现比Python更加直观,这需要更多的工作来对对象进行反序列化。 您可以看一下endpoints_proto_datastore.ndb.EndpointsModel
,它可能会使方程式中的一些样板内容(定义消息)消失。
本质上,在编写API时,每个端点都映射到python函数。 在该函数内,您可以执行自己喜欢的操作,但通常可以是:
反序列化您发布的JSON,进行验证,然后将一些实体写入数据存储区(或Cloud SQL,BigTable,无论在何处)。
从数据存储区读取一个或多个实体,并将其序列化为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.