Créer une API implémentée avec plusieurs classes

Cette page explique comment décorer votre code pour créer une API implémentée dans plusieurs classes. Si vous avez mis en œuvre l'API à l'aide d'une seule classe, consultez la page Créer l'API. Consultez la page Décorateurs pour obtenir des informations détaillées sur l'ensemble des décorateurs disponibles.

api_collection = endpoints.api(name="library", version="v1.0")


@api_collection.api_class(resource_name="shelves")
class Shelves(remote.Service):
    @endpoints.method(Request, Response)
    def list(self, request):
        return Response()


@api_collection.api_class(resource_name="books", path="books")
class Books(remote.Service):
    @endpoints.method(Request, Response, path="bookmark")
    def get_bookmark(self, request):
        return Response()

    @endpoints.method(Request, Response)
    def best_sellers_list(self, request):
        return Response()

Remplacez api_collection par le nom de votre choix, tant que vous utilisez le même nom pour chaque classe de l'API. Vous devez faire précéder chaque classe de l'API par le décorateur, comme indiqué dans l'extrait de code ci-dessus.

À propos de l'argument resource_name

L'argument facultatif resource_name pour api_class définit le nom de la classe que vous souhaitez exposer dans l'API. Il correspond au nom qui apparaît dans l'explorateur d'API, ajouté au début de toute méthode exposée dans la classe.

À propos de l'argument path

L'argument facultatif path pour api_class spécifie l'emplacement relatif auquel les méthodes de classe apparaissent dans l'URL. Dans l'exemple précédent, aucun argument path n'est spécifié pour la classe Shelves, dont les méthodes sont donc accessibles sous la racine (/_ah/api/library/v1). Par exemple, la méthode list est accessible à partir du chemin /_ah/api/library/v1/list.

Si vous spécifiez un argument path pour une classe, le chemin spécifié est ajouté à la racine. Dans l'exemple précédent, l'argument path est spécifié avec la valeur books pour la classe Books, dont les méthodes sont donc accessibles sous /_ah/api/library/v1/books. Par exemple, la méthode best_sellers_list est accessible à partir du chemin /_ah/api/library/v1/books/best_sellers_list.

L'argument path est facultatif pour les méthodes. Si vous ne spécifiez pas l'argument path, c'est le nom de la méthode qui est utilisé. Tous les chemins spécifiés pour les méthodes sont ajoutés au chemin de classe. Dans l'exemple précédent, la valeur bookmark est spécifiée comme argument path pour la méthode get_bookmark. La méthode get_bookmark est donc accessible à partir du chemin /_ah/api/library/v1/books/bookmark.

Vous pouvez ignorer l'argument path de la classe en spécifiant un argument de méthode path commençant par /. Par exemple, supposons que la méthode get_bookmark de la classe Books possède le chemin d'accès suivant :

@endpoints.method(Request, Response, path='/bookmark')
def get_bookmark(self, request):
  return Response()

La barre oblique initiale change le chemin de la méthode de get_bookmark en /_ah/api/library/v1/bookmark.

Publier une API à classes multiples

Dans le code endpoints.api_server servant à créer le serveur d'API, spécifiez le nom que vous avez attribué à la collection api_class. Par exemple, si le nom de la collection est api_collection, créez le serveur comme suit :

api = endpoints.api_server([api_collection])

Étape suivante