2016-03-22 18 views
0

Google Cloudを開始したばかりです。モバイルバックエンド経由でGoogle CloudサービスとやりとりするためのiOSアプリを作成しています。私はPythonを使ってApp Engineのバックエンドを書いています。エンドポイントに基づいたAPIを作成するチュートリアルを終えましたが、質問があります。クラウドエンドポイントとApp Engine

Cloud Endpoints APIを作成してからApp Engineにアプリケーションを作成する必要がありますか?基本的には、iOSアプリにアカウントを登録し、Google Datastoreを使用してアカウントの詳細を保存するAPIを呼び出すことができます。チュートリアル(クラウドエンドポイントとゲストブックの両方)を見て、エンドポイントAPI内にGoogle Datastore、クラウドストレージなどを公開する予定ですか?それとも、そのリンクが別のアプリにリンクされているのですか?

申し訳ありませんが、これは少し愚かな音が、私はちょうど確かめたい!

ありがとうございます。

答えて

0

簡単に言えば、Cloud Endpoints API は、お使いのアプリケーションではです。クラウドエンドポイントに関するドキュメントの中には、少し混乱するものがありますが、サーバー側では、アプリケーションロジックをREST APIとして公開するためのPythonデコレータやJavaアノテーションの本質的なものです。

クラウドエンドポイントのJava実装はPythonよりも直観的で、オブジェクトを直列化するためにはもう少し作業が必要です。 endpoints_proto_datastore.ndb.EndpointsModelを見れば、方程式(メッセージの定義)から定型的なものを取り除くことができます。

APIを書くとき、基本的に、各エンドポイントはPython関数にマッピングされます。その関数の内部で、あなたが好きなものを行うことができますが、通常、それはどちらかになります:

  1. あなたのPOSTさJSON Deserialise、それを検証し、(どこかのクラウドSQL、BigTableの、)データストアにいくつかのエンティティを記述します。

  2. Datastoreから1つ以上のエンティティを読み取り、それらをJSONにシリアル化してクライアントに返します。

    @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) 
    

たとえば、あなたが例えば

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

として、あなたのAPI(エンドポイント機能のコレクション全体を)定義することができます、あなたは近くのカフェを取得するためのエンドポイントを持っているかもしれません

ここで強調するべき事のいくつか。 Python Endpointsの実装では、リソースとメッセージクラスを定義する必要があります。これらはリクエストデータとレスポンスボディをカプセル化するために使用されます。

ので、上記の例では、GEO_RESOURCEは(ので、我々は検索APIを使用して場所で検索することができますが、わずか5つ星評価のカフェのためのデータストアを検索できます)GeoPointを作るために必要なフィールドをカプセル化:

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

CafeListResponseがちょうど(クラウドエンドポイントを使用すると、単一のオブジェクトを返す)CafeResponseオブジェクトのlistをカプセル化します:

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

をAPIによってシリアル化されたオブジェクト(通常はDatastoreエンティティ)をどのようにしたいかを定義するメッセージです。例えば、そのエンドポイントの署名付き

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

は、あなたが `cafeApi.cafes.nearby(...)で、/cafeApi/v1/cafes/nearby?lat=...&lon=...で、またはたとえば、経由してHTTP経由でGETのJavascript APIクライアントにアクセスすることができます。

個人的には、Pythonを使ってREST APIを作成することで、Flaskの柔軟性が少し向上しました。

+0

こんにちは@ tx802、この深い分析に感謝します!私はJavaをPython以上に知っていますが、PythonではJavaよりも多くのリポジトリが存在しています(これはやや直感的です)。 2つのいずれかを使用することに利点はありますか? – neX

+0

これは確かに助けになりました - 私は今、クラウドのエンドポイントが何を意味するのか理解していると思います! – neX

関連する問題