Eu tenho uma API RESTful que eu expus usando uma implementação do Elasticsearch em uma instância do EC2 para indexar um corpus de conteúdo. Eu posso consultar a pesquisa executando o seguinte no meu terminal (MacOSX):
curl -XGET 'http://ES_search_demo.com/document/record/_search?pretty=true' -d '{
"query": {
"bool": {
"must": [
{
"text": {
"record.document": "SOME_JOURNAL"
}
},
{
"text": {
"record.articleTitle": "farmers"
}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 50,
"sort": [],
"facets": {}
}'
Como transformar acima em uma solicitação de API usando python/requests
ou python/urllib2
(não tenho certeza qual deles escolher - está usando urllib2, mas ouço que as solicitações são melhores ...)? Eu passo como cabeçalho ou não?
python
api
rest
elasticsearch
user7289
fonte
fonte
Usando pedidos e JSON torna simples.
json.loads
funçãoO módulo Solicitações fornece uma função útil para repetir para obter sucesso e fracasso.
if(Response.ok)
: ajudará a determinar se sua chamada à API foi bem-sucedida (Código de resposta - 200)Response.raise_for_status()
ajudará você a buscar o código http retornado da API.Abaixo está um código de exemplo para fazer essas chamadas de API. Também pode ser encontrado no github . O código pressupõe que a API faz uso da autenticação Digest. Você pode pular isso ou usar outros módulos de autenticação apropriados para autenticar o cliente que está chamando a API.
fonte
jData[key]
jData
, nãojData[key]
print(json.dumps(jData, indent=4, sort_keys=True))
Então, se você deseja transmitir dados no corpo de uma solicitação GET, seria melhor fazê-lo na chamada POST. Você pode conseguir isso usando as duas solicitações.
Solicitação bruta
Amostra de chamada com solicitações
fonte
Abaixo está o programa para executar a restante API em python-
fonte