Crear una API implementada con varias clases

En esta página se describe cómo decorar tu código para crear una API implementada en varias clases. Si implementaste tu API con solo una clase, consulta Crea la API. Consulta Decoradores si deseas obtener más información 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()

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

Acerca del argumento resource_name

El argumento resource_name opcional para api_class es el nombre de la clase que necesitas exponer en la API. Este es el nombre que aparece en el Explorador de API y que se antepone a todo método expuesto en la clase.

Acerca del argumento path

El argumento path opcional para 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 un path para la clase Shelves, por lo que sus métodos son accesibles en /_ah/api/library/v1, la raíz. Por ejemplo, se puede acceder al método list desde la ruta de acceso /_ah/api/library/v1/list.

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

El argumento path es opcional para los métodos. Si no especificas un path, se usa el nombre del método. Toda ruta especificada para los métodos se agrega a la ruta de la 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 si especificas un método de argumento path que comience con /. Por ejemplo, supongamos que el método get_bookmark en la clase Books tiene la ruta siguiente:

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

Entrega una API de varias clases

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

api = endpoints.api_server([api_collection])

¿Qué sigue?