J'ai une API RESTful que j'ai exposée en utilisant une implémentation d'Elasticsearch sur une instance EC2 pour indexer un corpus de contenu. Je peux interroger la recherche en exécutant ce qui suit à partir de mon 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": {}
}'
Comment puis-je transformer ci-dessus en une demande d'API en utilisant python/requests
ou python/urllib2
( je ne sais pas laquelle choisir - j'ai utilisé urllib2, mais j'entends que les demandes sont meilleures ...)? Dois-je passer comme en-tête ou autrement?
la source
L'utilisation des requêtes et de json simplifie les choses.
json.loads
fonctionLe module Requests vous offre une fonction utile pour boucler pour le succès et l'échec.
if(Response.ok)
: vous aidera à déterminer si votre appel API a réussi (code de réponse - 200)Response.raise_for_status()
vous aidera à récupérer le code http renvoyé par l'API.Vous trouverez ci-dessous un exemple de code pour effectuer de tels appels API. Peut également être trouvé dans github . Le code suppose que l'API utilise l'authentification Digest. Vous pouvez ignorer cela ou utiliser d'autres modules d'authentification appropriés pour authentifier le client appelant l'API.
la source
jData[key]
jData
, pasjData[key]
print(json.dumps(jData, indent=4, sort_keys=True))
Donc, vous voulez passer des données dans le corps d'une demande GET, mieux vaut le faire dans un appel POST. Vous pouvez y parvenir en utilisant les deux requêtes.
Demande brute
Exemple d'appel avec demandes
la source
Ci-dessous se trouve le programme pour exécuter les autres api en python-
la source