Crear una API implementada con varias clases

En esta página se describe cómo decorar el código para crear una API implementada en varias clases. Si has implementado tu API usando solo una clase, consulta Crear la API. Consulta la sección Decoradores para obtener información detallada sobre todos los decoradores 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()

Sustituye api_collection por el nombre que quieras, siempre que uses el mismo nombre para cada clase de la API. Debes preceder cada clase de la API con el decorador, tal como se muestra en el fragmento anterior.

Acerca del argumento resource_name

El argumento opcional resource_name de api_class es el nombre de la clase que quieres exponer en la API. Este es el nombre que aparece en el Explorador de APIs, antepuesto a cualquier método expuesto en la clase.

Acerca del argumento path

El argumento opcional path de api_class especifica la ubicación relativa en la que aparecen los métodos de clase en la URL. En el ejemplo anterior, no se especifica ningún path para la clase Shelves, por lo que se puede acceder a sus métodos en la raíz, /_ah/api/library/v1. Por ejemplo, se puede acceder al método list desde la ruta /_ah/api/library/v1/list.

Si especificas un argumento path para una clase, la ruta especificada se añade a la raíz. En el ejemplo anterior, se especifica el argumento path books para la clase Books, por lo que se puede acceder a sus métodos mediante /_ah/api/library/v1/books. Por ejemplo, se puede acceder al método best_sellers_list desde la ruta /_ah/api/library/v1/books/best_sellers_list.

El argumento path es opcional para los métodos. Si no especificas ningún path, se usará el nombre del método. Las rutas especificadas para los métodos se añaden a la ruta de clase. En el ejemplo anterior, bookmark se especifica como path para el método get_bookmark. Se puede acceder al método get_bookmark desde la ruta /_ah/api/library/v1/books/bookmark.

Puedes anular el argumento path de la clase especificando un argumento path de método que empiece por /. Por ejemplo, supongamos que el método get_bookmark de la clase Books tiene la siguiente ruta:

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

La barra inicial cambia la ruta del método get_bookmark a /_ah/api/library/v1/bookmark.

Servir una API de varias clases

En el código endpoints.api_server que crea el servidor de la API, debes proporcionar el nombre que has asignado a tu colección api_class. Por ejemplo, si el nombre de la colección es api_collection, crearías el servidor de la siguiente manera:

api = endpoints.api_server([api_collection])

Siguientes pasos