У МЗ РФ есть
реестр МО.
Чтоб его получить есть
SOAP сервис.
Если справочник большой, то он делится на части, в каждой части определенной количество записей.
Есть два метода, первый получаю количество частей, второй количество записей в одной части:
def get_ref_book_parts(request):
if request.user.is_authenticated:
ref_book_code = request.GET.get("ref_book_code")
version = request.GET.get("version")
settings = zeep.Settings(strict=True)
client = zeep.Client(wsdl=wsdl, settings=settings)
return HttpResponse(
re.sub(
r'"',
"*",
str(client.service.getRefbookParts(user_key, ref_book_code, version)),
)
.replace("'", '"')
.replace("None", "null")
)
else:
return redirect("/api-auth/login/", locals())
def get_ref_book_partial(request):
if request.user.is_authenticated:
ref_book_code = request.GET.get("ref_book_code")
version = request.GET.get("version")
part_number = request.GET.get("part_number")
settings = zeep.Settings(strict=True)
client = zeep.Client(wsdl=wsdl, settings=settings)
return HttpResponse(
str(
client.service.getRefbookPartial(
user_key, ref_book_code, version, part_number
)
)
)
else:
return redirect("/api-auth/login/", locals())
Через VueJS + Axios сделал запрос при загрузке страницы и получение всех частей:
axios
.get('/soap/get_ref_book_parts/', {
params: {
ref_book_code: '1.2.643.5.1.13.13.11.1461', // Виды медицинских направлений
version: '5.61'
}
})
.then(response => (getNames(parseInt(response.data.item[0].value, 10))))
.catch(error => (console.log(error)))
.then();
function getNames(parts) {
for (parts; parts !== 0; parts--) {
axios
.get('/soap/get_ref_book_partial/', {
params: {
ref_book_code: '1.2.643.5.1.13.13.11.1461', // Виды медицинских направлений
version: '5.61',
part_number: parts
}
})
.then(response => (console.log(response)))
.catch(error => (console.log(error)))
.then();
}
}
В итоге - справочник 26 частей.
Через for моментально делает 26 запросов:
Как это выглядит со стороны сервера:
Тоже самое виде текста:
[02/Feb/2019 20:43:57] "GET /soap/get_ref_book/?ref_book_code=1.2.643.5.1.13.2.1.1.358&version=1.0 HTTP/1.1" 200 15394
[02/Feb/2019 20:43:57] "GET /soap/get_ref_book/?ref_book_code=1.2.643.5.1.13.13.11.1009&version=2.1 HTTP/1.1" 200 13556
[02/Feb/2019 20:44:29] "GET /soap/get_ref_book_parts/?ref_book_code=1.2.643.5.1.13.13.11.1461&version=5.61 HTTP/1.1" 200 167
[02/Feb/2019 20:45:54] "GET /soap/get_ref_book_partial/?ref_book_code=1.2.643.5.1.13.13.11.1461&version=5.61&part_number=24 HTTP/1.1" 200 7534088
[02/Feb/2019 20:46:08] "GET /soap/get_ref_book_partial/?ref_book_code=1.2.643.5.1.13.13.11.1461&version=5.61&part_number=21 HTTP/1.1" 200 7501284
[02/Feb/2019 20:46:08] "GET /soap/get_ref_book_partial/?ref_book_code=1.2.643.5.1.13.13.11.1461&version=5.61&part_number=25 HTTP/1.1" 200 7537635
[02/Feb/2019 20:46:08] "GET /soap/get_ref_book_partial/?ref_book_code=1.2.643.5.1.13.13.11.1461&version=5.61&part_number=22 HTTP/1.1" 200 7483618
[02/Feb/2019 20:46:11] "GET /soap/get_ref_book_partial/?ref_book_code=1.2.643.5.1.13.13.11.1461&version=5.61&part_number=23 HTTP/1.1" 200 7504062
[02/Feb/2019 20:46:13] "GET /soap/get_ref_book_partial/?ref_book_code=1.2.643.5.1.13.13.11.1461&version=5.61&part_number=20 HTTP/1.1" 200 7608268
[02/Feb/2019 20:49:29] "GET /soap/get_ref_book_partial/?ref_book_code=1.2.643.5.1.13.13.11.1461&version=5.61&part_number=23 HTTP/1.1" 200 7504062
[02/Feb/2019 20:49:34] "GET /soap/get_ref_book_partial/?ref_book_code=1.2.643.5.1.13.13.11.1461&version=5.61&part_number=22 HTTP/1.1" 200 7483618
[02/Feb/2019 20:49:34] "GET /soap/get_ref_book_partial/?ref_book_code=1.2.643.5.1.13.13.11.1461&version=5.61&part_number=25 HTTP/1.1" 200 7537635
[02/Feb/2019 20:49:35] "GET /soap/get_ref_book_partial/?ref_book_code=1.2.643.5.1.13.13.11.1461&version=5.61&part_number=21 HTTP/1.1" 200 7501284
[02/Feb/2019 20:49:36] "GET /soap/get_ref_book_partial/?ref_book_code=1.2.643.5.1.13.13.11.1461&version=5.61&part_number=24 HTTP/1.1" 200 7534088
[02/Feb/2019 20:49:38] "GET /soap/get_ref_book_partial/?ref_book_code=1.2.643.5.1.13.13.11.1461&version=5.61&part_number=20 HTTP/1.1" 200 7608268
Почему JS отдает 26 запросов по очереди, а сервер обрабатывает 26 запросов пачками по 5 с интервалам 5 минут между пачками?