Тьфу, испытания и невзгоды обучения написанию программного обеспечения. На этой неделе я написал свой самый первый API, который загружает более 35 000 строк в базу данных Postgresql из 6 CSV-файлов с помощью одной команды rake. И не забудьте ActiveRecord для перевода таблиц в объекты Ruby. Контроллеры загружали записи из базы данных, запрашивая модели и отправляя записи в формате json. Излишне говорить, что это была горстка.
Переходите к этапу планирования и настройки…
Пропустив небрежную болтовню о настройке и тестировании рельсов, мне нужны были модели и быстро, иначе я не смог бы загрузить ни один из CSV-файлов. К счастью, я использовал заголовки csv в качестве руководства. Наличие очевидных внешних ключей давало мне понять, когда нужна связь и была ли это таблица соединений, has_many или author_to, исходя из простой логики. Установив эти внешние ключи заранее, вы сможете более эффективно спланировать свои отношения с базой данных.
Необходимые модели:
Продавец, клиент, транзакция, счет-фактура, позиция и позиция счета-фактуры

Затем мне нужно было вспомнить, как загружать CSV-файлы, и научиться делать это с помощью команды rake. Прежде всего, мне нужно было выяснить, куда поместить файл, что легче сказать, чем сделать, учитывая размер приложения rails, но комментарий в Rakefile на самом деле говорит вам поместить ваши файлы в папку lib/tasks с суффиксом с .рейк. в моем случае я использовал import.rake.
Мне также пришлось требовать csv в верхней части файла
Короче говоря, я собрал пять других загрузчиков csv, как показано ниже:

Вот действительно полезное видео, если вам интересно или нужно узнать больше.
Теперь, когда мои файлы были загружены, я мог перейти к созданию контроллеров и методов модели, но это API, поэтому мне пришлось немного изучить json и сериализацию.
Каждой модели требовался сериализатор для преобразования данных объектов в определенную хэш-структуру, которую затем можно было преобразовать в стандартный json непосредственно перед отправкой в мир в качестве ответа API. Для этого я использовал гем fast_jsonapi. Прочитайте все об этом по следующей ссылке, как и я.
apihttps://github.com/Netflix/fast_jsonapi#модель-определение

Вот часть сериализованного хэша элементов, готовых к отправке в виде json:

Теперь действие контроллера направляет ответ

Вот оно, простое, да?
Конечно, вы можете даже забыть о сериализаторе и отформатировать Json как хотите, но все счастливее, когда мы все используем стандартный способ передачи информации между нашими API.
У нас может быть простой ответ API выше, но это немного скучно, верно? Мы можем передавать гораздо более подробную информацию с помощью нашего API, и это последнее основное препятствие, с которым я столкнулся при создании своего первого API.
Я использовал ActiveRecord и SQL для управления информацией из базы данных.
Проверьте это:

Вот метод класса Merchant, который я сделал, чтобы найти общий доход на определенную дату. Таблица продавца соединяется с тремя другими таблицами посредством соединения внешних и первичных ключей и фильтруется с помощью предложений where. Обратите внимание, что последний метод на самом деле похож на дополнительный атрибут, созданный в отношении activerecord, который затем может быть вызван сам по себе.
В общем и целом, мой первый API был отличным опытом изучения нового программного обеспечения, а также отличной практикой с тем, что я уже знаю. Самой сложной частью было большое количество повторяющейся работы, которую нужно было сделать за короткий промежуток времени, но я работал долгие часы, чтобы действительно выполнить большую часть работы.
Мне очень понравилось создавать более сложные запросы ActiveRecord и искать новые способы выполнения задач. Я хотел бы продолжать экспериментировать с новыми методами, закрепляя уже полученные знания по мере продвижения вперед.