APIs e Microsserviços

4 jun, 2013

Exposição simples RESTO ful- (ish) de APIs de Python – Parte 05

Publicidade

(parte 1, parte 2, parte 3, parte 4)

Estou quase finalizando as peças para deixar este projeto do PyPI pronto – ele agora pode funcionar na sua aplicação, desde que você implemente o código real para rotear chamadas para a parte correta da sua API – isto funciona:

python -m pyrest.launcher  --server pyrest.integration.cherry \
       --api=pyrest.examples.hg

A configuração também pode ser feita usando um arquivo de configuração em vez de/ou em conjunto com os argumentos de linha de comando. Isso significa que você pode descrever o uso de sua API usando módulos (representando recursos) e postar/colocar/pegar/excluir funções nesses módulos, então, você pode praticamente só copiar a linha acima e ter uma interface REST, desde que você devolva os dados que a biblioteca json entende como serializar.

A mágica está no novo launcher.py, que lê a configuração, instancia pyrest, uma interface appserver, e conecta-se à API especificada. Outras poucas mudanças se fazem necessárias – nenhuma para pyrest.py, e para cherry.py a única mudança foi mover a funcionalidade do ‘if dunder main’ para uma nova função start().

Hora de verificar as metas!

  • Criar uma ferramenta que possa expor uma API Python de uma maneira REST
  • A API em si não precisa saber sobre a ferramenta
  • É preciso lidar com erros de HTTP
  • Deve ser executado em Python 3.2 ou superior

Com tudo isso feito, tendo o novo módulo de lançamento cuidando da leitura de configuração/argumentos e ligado com servidor backend correto – embora agora mesmo haja apenas a versão CherryPy disponível.

  • Deve rodar ao menos no CherryPy e em dois outros frameworks web TBD (não, não o Django). Não está OK, com apenas CherryPy implementado.
  • Deve ser capaz de codificar os dados em JSON antes de os retornar. Está parcialmente OK, mas não há nenhuma forma clara de se especializar a serialização se você enviar dados que não são manipuláveis pelo módulo da biblioteca padrão JSON.

Além desses objetivos, eu terei que criar um setup.py para tornar a ferramenta instalável antes que eu possa nomeá-la de versão 1.0.0.

Eu também gostaria de agradecer às pessoas da DZone – eles não apenas perguntaram se podiam repostar meu site (mesmo não precisando, porque eu permito que qualquer um faça qualquer coisa com isso desde que não me culpem por possíveis danos…), mas eles me enviaram guloseimas do outro lado do Atlântico! Eles realmente me enviaram nerf guns do outro lado do mundo só porque gostaram do meu site. Loucura. Se todo mundo que gostasse do meu site fizesse isso, eu teria, tipo, três nerf guns!

Dito isso, o código está sempre disponível em Bitbucket.

***

Artigo traduzido pela Redação iMasters, com autorização do autor. Publicado originalmente em http://blaag.haard.se/pyRest-part-5–You-can-actually-use-this/#disqus_thread