Na primeira parte, uma base de implementação CherryPy muito desinteressante era tudo o que tínhamos, mas agora é hora de conectar algo real! Em vez de criar uma API de mock para trabalhar contra como código de exemplo, eu decidi usar hgapi para acessar o próprio pyrestrepo como exemplo de implementação.
Decidi conectar a API antes de refatorar o código para separar o framework web a partir de pyRest, já que eu realmente acredito em fazer as coisas funcionarem primeiro e limpar tudo depois. Eu criei um namedtuple para manter os valores de resposta básicos para que a função requesthandler pudesse ser extraída posteriormente.
A parte “interessante” é assim:
Response = namedtuple('response', 'status content') def requesthandler(method, *pathargs, **kwargs): """Main dispatch for calls to PyRest; no framework specific code to be present after this point""" if not method == 'get': return Response('500 Server Error', 'Not implemented') repo = hgapi.Repo('.') return Response('200 Ok', repo.hg_id())
… não é muito ainda, mas ele responde a qualquer pedido GET com o ID do node Mercurial atual.
Minha intenção é que o resultado final seja três partes distintas – uma parte específica de roteamento/domínio que usa hgapi, pyRest adequado que lida com as solicitações e autohooks até o encaminhamento; uma parte CherryPy que se integra com CherryPy e precisará ser reimplementado para cada framework web suportado.
Porém, terá pelo menos uma atualização antes disso porque o próximo será a lógica de roteamento “vinculação automática”. O código para o projeto está disponível em Bitbucket.
***
Texto original disponível em http://blaag.haard.se/pyRest-part-2–Hooking-the-API/