Непоследовательный ответ от R Plumber API - PullRequest
0 голосов
/ 16 июня 2019

Я создал 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"

Есть идеи, почему я вижу это непоследовательное поведение? Я пользуюсь последним доступным пакетом сантехника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...