簡単に言えば、Cloud Endpoints API は、お使いのアプリケーションではです。クラウドエンドポイントに関するドキュメントの中には、少し混乱するものがありますが、サーバー側では、アプリケーションロジックをREST APIとして公開するためのPythonデコレータやJavaアノテーションの本質的なものです。
クラウドエンドポイントのJava実装はPythonよりも直観的で、オブジェクトを直列化するためにはもう少し作業が必要です。 endpoints_proto_datastore.ndb.EndpointsModel
を見れば、方程式(メッセージの定義)から定型的なものを取り除くことができます。
APIを書くとき、基本的に、各エンドポイントはPython関数にマッピングされます。その関数の内部で、あなたが好きなものを行うことができますが、通常、それはどちらかになります:
あなたのPOSTさJSON Deserialise、それを検証し、(どこかのクラウドSQL、BigTableの、)データストアにいくつかのエンティティを記述します。
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の柔軟性が少し向上しました。
こんにちは@ tx802、この深い分析に感謝します!私はJavaをPython以上に知っていますが、PythonではJavaよりも多くのリポジトリが存在しています(これはやや直感的です)。 2つのいずれかを使用することに利点はありますか? – neX
これは確かに助けになりました - 私は今、クラウドのエンドポイントが何を意味するのか理解していると思います! – neX