Mam interfejs API RESTful, który ujawniłem za pomocą implementacji Elasticsearch w instancji EC2 w celu zindeksowania korpusu treści. Mogę wysłać zapytanie do wyszukiwania, uruchamiając z mojego terminala (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": {}
}'
Jak zamienić powyższe w żądanie API za pomocą python/requests
lub python/urllib2
(nie jestem pewien, który wybrać - korzystałem z urllib2, ale słyszę, że żądania są lepsze ...)? Czy przekazuję jako nagłówek czy w inny sposób?
python
api
rest
elasticsearch
użytkownik7289
źródło
źródło
Korzystanie z żądań i json sprawia, że jest to proste.
json.loads
funkcjiModuł żądań zapewnia przydatną funkcję zapętlania sukcesu i niepowodzenia.
if(Response.ok)
: pomoże ustalić, czy połączenie API zakończyło się powodzeniem (kod odpowiedzi - 200)Response.raise_for_status()
pomoże ci pobrać kod http, który jest zwracany z API.Poniżej znajduje się przykładowy kod do wykonywania takich wywołań API. Można również znaleźć w github . Kod zakłada, że interfejs API korzysta z uwierzytelniania skrótu. Możesz to pominąć lub użyć innych odpowiednich modułów uwierzytelniania, aby uwierzytelnić klienta wywołującego interfejs API.
źródło
jData[key]
jData
, a niejData[key]
print(json.dumps(jData, indent=4, sort_keys=True))
Więc chcesz przekazać dane w treści żądania GET, lepiej byłoby zrobić to w wywołaniu POST. Możesz to osiągnąć, korzystając z obu żądań.
Raw Raw
Przykładowe połączenie z żądaniami
źródło
Poniżej znajduje się program do wykonania reszty interfejsu API w python-
źródło