2016-03-22 213 views
0

我剛剛開始使用Google Cloud,並且正在創建iOS應用以通過移動後端與Google Cloud服務進行互動。我使用Python爲App Engine編寫後端。我已經閱讀了基於端點創建API的教程 - 但我有一個問題。Cloud Endpoints和App Engine

我是否必須創建Cloud Endpoints API,然後創建App Engine上的應用程序?基本上,我希望能夠在我的iOS應用程序上註冊帳戶,然後調用API,然後使用Google Datastore存儲帳戶詳細信息。從查看教程(雲端點,然後是留言簿),我是否想要在端點api內暴露Google數據存儲,雲存儲等內容?或者,這是否鏈接到另一個應用程序,這一切都完成了?

對不起,如果這聽起來有點傻,但我只是想確定!

在此先感謝。

回答

0

簡而言之,您的Cloud Endpoints API 您的應用程序。一些關於雲端點的文檔可能有點混亂(或模糊),但在服務器端,它本質上是一堆Python裝飾器或Java註釋,它們允許您將應用程序邏輯作爲REST API公開。

我發現雲端點的Java實現比Python更直觀,這需要更多的工作來對對象進行序列化。你可以看看endpoints_proto_datastore.ndb.EndpointsModel這可能會從方程式(定義信息)中拿出一些樣板材料。

基本上,當你編寫你的API時,每個端點映射到一個python函數。內部的功能,你可以做你喜歡的東西,但通常這將是兩種:

  1. Deserialise您發佈的JSON,驗證它,並寫一些實體數據存儲(或雲SQL,BigTable的,別的地方)。

  2. 從Datastore讀取一個或多個實體,並將它們序列化爲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端點實現,您需要定義資源和消息類 - 這些類用於封裝請求數據和響應主體。

所以,在上面的例子中,GEO_RESOURCE封裝做出GeoPoint所需的字段(這樣我們就可以使用搜索API的位置進行搜索,但你可能只是搜索數據存儲與一個5星評級咖啡館):

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

CafeListResponse只想封裝CafeResponse對象list(與雲端點返回一個對象):

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) 

隨着該端點的簽名,可以通過HTTP GET/cafeApi/v1/cafes/nearby?lat=...&lon=...或者通過,比如用`cafeApi.cafes.nearby(...)訪問它,JavaScript的API客戶端。

就我個人而言,我發現Flask在使用Python創建REST API方面更加靈活。

+0

Hi @ tx802,非常感謝您的深入分析!我比Python更瞭解Java,但是我已經感到Python中的存儲庫比Java更多(即使我發現後者稍微更直觀一些,表明它有更多支持/受歡迎程度)。使用這兩者中的任何一個有什麼優勢? – neX

+0

這肯定有幫助 - 我想我明白雲端點現在應該做什麼! – neX

相關問題