Criar uma API implementada com várias classes

Esta página descreve como decorar o seu código para criar uma API implementada em várias classes. Se implementou a API com apenas uma classe, consulte o artigo Criar a API. Consulte a secção Decoradores para ver 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 por qualquer nome que quiser, desde que use o mesmo nome para cada classe na API. Tem de preceder cada classe na API com o decorador, conforme mostrado no fragmento anterior.

Acerca do argumento resource_name

O argumento resource_name opcional para api_class é o nome da classe que quer expor na API. Este é o nome que aparece no API Explorer, anteposto a quaisquer métodos expostos na classe.

Acerca do argumento path

O argumento path opcional para api_class especifica a localização relativa na qual os métodos da classe aparecem no URL. No exemplo anterior, não é especificado um path para a classe Shelves, pelo que os respetivos métodos são acessíveis na raiz, /_ah/api/library/v1. Por exemplo, o método list é acessível a partir do caminho /_ah/api/library/v1/list.

Se especificar um argumento path para uma classe, o caminho especificado é anexado à raiz. No exemplo anterior, o argumento path é especificado para a classe Books, pelo que os respetivos métodos são acessíveis em /_ah/api/library/v1/books.books Por exemplo, o método best_sellers_list está acessível a partir do caminho /_ah/api/library/v1/books/best_sellers_list.

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

Pode substituir o argumento path da classe especificando um argumento path do método que comece por /. Por exemplo, suponha que o método get_bookmark na classe Books tem o seguinte caminho:

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

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

Publicar uma API de várias classes

No código endpoints.api_server que cria o servidor da API, fornece o nome que atribuiu à sua coleção api_class. Por exemplo, onde o nome da coleção é api_collection, criaria o servidor da seguinte forma:

api = endpoints.api_server([api_collection])

O que se segue?