簡體   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