Создание API REST для загрузки больших наборов данных - PullRequest
2 голосов
/ 06 марта 2019

В настоящее время я создаю набор API REST, которые будут использоваться для загрузки неопределенного количества строк информации в нашу базу данных. Эти API будут использоваться разработчиками из сторонней команды компании.

Объем информации начинался бы с ежедневной массовой загрузки примерно 4 тыс. Строк информации, с расчетным увеличением примерно на 5 тыс. Строк информации примерно через 4 месяца. Мой вопрос: как лучше всего разработать API загрузки?

Прежде чем я напишу некоторые из идей, я читал здесь о некоторых соображениях, которые необходимо принять во внимание.

  • Загрузка информации и использование этих API почти всегда будут выполняться только один раз в день.
  • Общая структура строки информации выглядит следующим образом, времена 4k.

    "data": [ {"InfoID": 1, "InfoName": "HELLO", "InfoValue": 1.00, "InfoDate": "2019-01-01"}, {"InfoID": 2, "InfoName": "WORLD", "InfoValue": 2.00, "InfoDate": "2019-01-02"} ]

Некоторые идеи, о которых я читал при разработке API такого типа:

  • Ограничить количество информационных строк, которые могут быть загружены в параметр JSON с помощью управления информацией о номере страницы. Это означало бы, что сторонняя команда должна будет реализовать упомянутый контроль разбиения на страницы при извлечении и загрузке информации из своей базы данных.
  • Загрузить файл CSV. Это также может реализовать разбиение на страницы загрузки файла в случае, если файл может быть слишком тяжелым.
  • POST API, который загружал бы информацию о строках одну за другой, но я считаю, что это не лучший вариант для таких больших наборов данных.

Любые мнения, рекомендации и идеи будут полезны при принятии проектного решения.

1 Ответ

1 голос
/ 06 марта 2019

Я бы предложил одну конечную точку, которая принимает POST запросов.Пусть тело запроса будет представлять собой весь пакет данных в любых форматах, в которых вы его принимаете - JSON, XML, CSV и т. Д. Попросите клиентов указать заголовок Content-Type, чтобы указать, в какой формат они отправляют информацию.Разобрать этот формат, чтобы применить пакет изменений.Если для ответа потребуется более секунды или около того, отправьте 202 Accepted прямо сейчас и заголовок Location с конечной точкой, где они могут получить отчет о ходе выполнения пакетной обработки.

Обратите внимание, что вам придется решить, как обрабатывать загрузки, в которых есть некоторые неверные записи - либо потерпеть неудачу во всем пакете, либо принять то, что можете.

Возможно, разбиение на страницы является излишним.Исходя из приведенного вами примера, 5 000 записей, вероятно, меньше, чем один мегабайт?Взвесьте это в противовес раздражению клиента, вынужденного заниматься пагинацией.Как клиент, я бы не хотел этого делать.

Требовать от клиентов POST 4k раз, чтобы получить все свои данные, вероятно, не лучшая идея из-за снижения производительности.Также маловероятно, что клиенты захотят сами проанализировать данные для записи цикла.

...