Depois de ter escrito código para expor APIs através de serviços web RESTful algumas vezes, eu decidi fazê-lo mais uma vez, só que desta eu não vou ser pago, nem terei prazos. Vou escrevê-lo e nunca mais terei que escrever de novo, e vou torná-lo disponível como open source.
O problema é que eu sou uma pessoa muito preguiçosa e não fui capaz de criar coragem para realmente começar a escrever, o que me leva a este artigo.
Para que outra pessoa seja capaz de acompanhar o trabalho, obviamente não tenho que explicitar que o objetivo deste exercício é:
- Criar uma ferramenta que pode expor uma API Python de uma forma REST
- A API em si não deve ter que saber sobre a ferramenta
- Deve ser executado em pelo menos em CherryPy e em dois outros frameworks webapp TBD (não, não o Django)
- É preciso lidar com erros HTTP
- Deve ser capaz de codar dados em JSON antes de retorná-los
- Deve ser executada em Python 3.2+
- Não deve se importar com a definição adequada de RESTful
Além disso, algumas coisas boas para se ter:
- Pode fazer ligações entre os recursos de forma mais fácil (se possível)
- Pode ser capaz de usar outros formatos de dados além do JSON
- Pode ser executado em Python 2.7
Por gostar de trabalhar com CherryPy, vou começar a escrever para CherryPy e depois generalizar a partir de lá. Só para começar, eu criei um aplicativo mínimo em CherryPy a partir do qual trabalhar, mesmo que eu vá dividir a ferramenta do framework (ou o framework REST do framework web?) mais tarde. O código inteiro é assim:
import cherrypy def requesthandler(*pathargs, **kwargs): cherrypy.response.status = "500 Server Error" return "Not implemented" class PyRest(object): def index(self, *args, **kwargs): return requesthandler(*args, **kwargs) index.exposed = True CONF = { 'global': { 'server.socket_host': '0.0.0.0', 'server.socket_port': 8888, } } if __name__ == '__main__': ROOT = PyRest() cherrypy.quickstart(ROOT, '/', CONF) def application(environ, start_response): cherrypy.tree.mount(PyRest(), '/', None) return cherrypy.tree(environ, start_response)
***
Texto original disponível em http://blaag.haard.se/Simple-REST-ful—ish–exposure-of-Python-APIs/