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/



