Como criar uma API implementada com várias classes

Nesta página, descrevemos como decorar o código para a criação de uma API implementada em várias classes. Se você implementou sua API usando apenas uma classe, consulte Como criar a API. Consulte Decoradores para informações detalhadas sobre todos os decoradores disponíveis.

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

Substitua api_collection pelo nome que preferir, desde que o mesmo nome seja usado para cada classe na API. Cada classe tem de ser precedida do decorador, conforme mostrado no snippet acima.

Sobre o argumento resource_name

O argumento resource_name opcional para api_class é o nome da classe que você quer expor na API; esse é o nome que aparece no APIs Explorer, anexado a todos os métodos expostos na classe.

Sobre o argumento path

O argumento path opcional para api_class especifica o local relativo em que os métodos de classe aparecem no URL. No exemplo anterior, um path não é especificado para a classe Shelves e os métodos dela são acessíveis sob a raiz, /_ah/api/library/v1. Por exemplo, o método list é acessível pelo caminho /_ah/api/library/v1/list.

Se você especificar um argumento path para uma classe, o caminho especificado será anexado à raiz. No exemplo anterior, o argumento path de books é especificado para a classe Books, assim seus métodos são acessíveis em /_ah/api/library/v1/books. Por exemplo, o método best_sellers_list é acessível pelo caminho /_ah/api/library/v1/books/best_sellers_list.

O argumento path é opcional para métodos. Se você não especificar um path, o nome do método será usado. Todos os caminhos especificados para métodos são anexados ao caminho da classe. No exemplo anterior, bookmark é especificado como path para o método get_bookmark. O método get_bookmark é acessível pelo caminho /_ah/api/library/v1/books/bookmark.

É possível substituir o argumento path da classe especificando um argumento path do método que comece com /. Por exemplo, suponha que o método get_bookmark na classe Books tenha o seguinte caminho:

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

A barra inicial altera o caminho do método get_bookmark para /_ah/api/library/v1/bookmark.

Como disponibilizar uma API multiclasse

No código endpoints.api_server para a criação do servidor da API, informe o nome atribuído à coleção api_class. Por exemplo, quando o nome da coleção for api_collection, crie o servidor da seguinte maneira:

api = endpoints.api_server([api_collection])

A seguir