Я создал Plumber API, который принимает строку в кодировке base64, извлекает из нее данные, превращает ее во фрейм данных и возвращает данные в формате JSON. Проблема в том, что я получаю противоречивые ответы при тестировании на Swagger и Postman. При отправке запроса я в основном получаю Ответ 404 - Ресурс не найден, но время от времени я получаю ответ 200 с данными, правильно предоставленными в виде JSON.
Для справки: закодированная в base64 строка соответствует первой странице этого документа
Код сантехника:
# plumber.R
#* Echo back the input
#* @param encoded_data Base-64 encoded_data pdf
#* @get /extractAML
function(encoded_data){
library(tidyverse)
library(pdftools)
library(base64enc)
input <- strsplit(rawToChar(base64decode(encoded_data)), "\n")
df <- data.frame(key = input[[1]], value = lead(input[[1]],1))
index <- which(grepl("^[0-9]{1,2}\\.",df$key))
df <- df[index,]
df <- df %>% slice(1:10)
df
}
Я тогда бегу
r <- plumb("plumber.R")
r$run(port=8002)
для предоставления API.
Я использую «Try it Out» на странице Swagger и вставляю строку в кодировке base64, затем выполняю. Первоначально это возвращает 404, но после попытки больше раз (может быть 10 раз, может быть 20) я получаю успешный вызов. JSON показан ниже. Но затем я снова нажимаю Выполнить несколько секунд спустя и снова получаю ответ 202.
[
{
"key": "1. Name of Institution Completing\r",
"value": " East West Bank\r"
},
{
"key": "2. Date Completed:\r",
"value": " March 13th 2018\r"
},
{
"key": "3. Completed by:\r",
"value": " Name: Myrna Olvera\r"
},
{
"key": "4. Date Established:\r",
"value": " January 1, 1972\r"
},
{
"key": "5. Number of Branches:\r",
"value": " 120+ in USA, 1 branch in Hong Kong and 2 representative offices in\r"
},
{
"key": "6. Type of Business: Commercial and Personal Banking\r",
"value": "7. Registration Certificate No./License No.:\r"
},
{
"key": "7. Registration Certificate No./License No.:\r",
"value": " Federal Reserve ID #197478, FDIC # 31628, CA DFI #1748\r"
},
{
"key": "8. Address:\r",
"value": " 135 North Los Robles Avenue, California, CA 91101, USA\r"
},
{
"key": "9. Principal Place of Business:\r",
"value": " 135 North Los Robles Avenue, California, CA 91101, USA\r"
},
{
"key": "10. Location Of The Head Office:\r",
"value": " 135 North Los Robles Avenue, California, CA 91101, USA\r"
}
]
Я попытался запустить вызов API в Postman и получить те же результаты - в основном я получаю 404 ответа, но иногда возвращается ожидаемый json. То же самое, когда я запускаю локон в bash.
Полный оператор Curl:
curl -X GET "http://127.0.0.1:8002/extractAML?encoded_data=ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNTC9LWUMgUXVlc3Rpb25uYWlyZSBGb3JtDQpBbnRpLU1vbmV5IExhdW5kZXJpbmcgUXVlc3Rpb25uYWlyZQ0KSS4gQ29ycG9yYXRlIEluZm9ybWF0aW9uOg0KMS4gTmFtZSBvZiBJbnN0aXR1dGlvbiBDb21wbGV0aW5nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhc3QgV2VzdCBCYW5rDQogICAgIFF1ZXN0aW9ubmFpcmU6DQoyLiBEYXRlIENvbXBsZXRlZDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFyY2ggMTN0aCAyMDE4DQozLiBDb21wbGV0ZWQgYnk6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU6ICAgICBNeXJuYSBPbHZlcmENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGU6ICAgIFNlbmlvciBWaWNlIFByZXNpZGVudCwgQlNBIE9mZmljZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb246IEJTQSBPZmZpY2VyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtYWlsOiAgICBNeXJuYS5PbHZlcmFARWFzdFdlc3RCYW5rLmNvbQ0KNC4gRGF0ZSBFc3RhYmxpc2hlZDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSmFudWFyeSAxLCAxOTcyDQo1LiBOdW1iZXIgb2YgQnJhbmNoZXM6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMCsgaW4gVVNBLCAxIGJyYW5jaCBpbiBIb25nIEtvbmcgYW5kIDIgcmVwcmVzZW50YXRpdmUgb2ZmaWNlcyBpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGluYS4NCjYuIFR5cGUgb2YgQnVzaW5lc3M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVyY2lhbCBhbmQgUGVyc29uYWwgQmFua2luZw0KNy4gUmVnaXN0cmF0aW9uIENlcnRpZmljYXRlIE5vLi9MaWNlbnNlIE5vLjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmVkZXJhbCBSZXNlcnZlIElEICMxOTc0NzgsIEZESUMgIyAzMTYyOCwgQ0EgREZJICMxNzQ4DQo4LiBBZGRyZXNzOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzUgTm9ydGggTG9zIFJvYmxlcyBBdmVudWUsIENhbGlmb3JuaWEsIENBIDkxMTAxLCBVU0ENCjkuIFByaW5jaXBhbCBQbGFjZSBvZiBCdXNpbmVzczoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM1IE5vcnRoIExvcyBSb2JsZXMgQXZlbnVlLCBDYWxpZm9ybmlhLCBDQSA5MTEwMSwgVVNBDQoxMC4gTG9jYXRpb24gT2YgVGhlIEhlYWQgT2ZmaWNlOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzUgTm9ydGggTG9zIFJvYmxlcyBBdmVudWUsIENhbGlmb3JuaWEsIENBIDkxMTAxLCBVU0ENCjExLiBXZWJzaXRlIEFkZHJlc3M6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5lYXN0d2VzdGJhbmsuY29tDQpJSS4gT3duZXIvUGFyZW50IEluZm9ybWF0aW9uOg0KMTIuIExlZ2FsIEVudGl0eSBOYW1lIG9mIHBhcmVudCBjb21wYW55Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYXN0IFdlc3QgQmFuY29ycCwgSW5jLg0KMTMuIFBlcmNlbnRhZ2Ugb2Ygb3duZXJzaGlwIG9mIGNvbXBhbnk6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMCUNCklJSS4gT3duZXJzaGlwIFN0cnVjdHVyZToNCjE0LiBJcyB0aGUgRkkgd2hvbGx5IG9yIHBhcnRpYWxseSBvd25lZCBieSBhIHN0YXRlIGVudGl0eSBvciB0aGUgZ292ZXJubWVudD8gICAgICAgICAgICAgICAgICAgICAg4piQIFllcyAgICAgICAg4piSIE5vDQoxNS4gSXMgdGhlIEZJIHB1YmxpY2x5IG93bmVkIGFuZCBsaXN0ZWQgb24gYW55IFN0b2NrIEV4Y2hhbmdlPw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDimJIgWWVzICAgICAgICDimJAgTm8NCiAgICAgICAgICAgICAgIOKAoiBJZiB5ZXMsIHBsZWFzZSBwcm92aWRlIHRoZSBuYW1lIG9mIHRoZSBTdG9jayBFeGNoYW5nZTogTkFTREFRIFN0b2NrDQogICAgICAgICAgICAgICAgIEV4Y2hhbmdlIChTdG9jayBTeW1ib2w6IEVXQkMpDQogICAgICAgICAgICAgICDigKIgSWYgbm8sIHBsZWFzZSBhdHRhY2ggYSBsaXN0IG9mIHRoZSBiZW5lZmljaWFsIG93bmVyczEgb2YgdGhlIEZJIChpbmNsdWRpbmcgdGhlaXINCiAgICAgICAgICAgICAgICAgbm9taW5lZXMsIGlmIHRoZWlyIHNoYXJlcyBhcmUgaGVsZCBieSBub21pbmVlcykuDQoxNi4gUGxlYXNlIGNvbmZpcm0gd2hldGhlciBhbnkgb2YgdGhlIHByaW5jaXBhbCBvd25lcnMgb2YgdGhlIEZJIGlzIGNvbnNpZGVyZWQgYXMgUG9saXRpY2FsbHkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4piQIFllcyAgICAgICAg4piSIE5vDQogICAgIEV4cG9zZWQgUGVyc29uMi4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgMSBvZiA0DQo%3D" -H "accept: application/json"
Есть идеи, почему я вижу это непоследовательное поведение? Я пользуюсь последним доступным пакетом сантехника.