JSONAPI лучший способ для ответа на нересурсные данные, такие как токен доступа, с помощью jsonapi-ресурсов
Я реализую этот API, и первое, что я сделал, - это логин с токеном доступа. Я использую гем jsonapi-resources https://github.com/cerebris/jsonapi-resources
У меня сейчас две проблемы. Я хочу вернуть пользователя И сгенерированный токен доступа в случае успеха и сообщение об ошибке в противном случае.
Теперь у меня есть две проблемы:
1- Во-первых, как я могу вернуть данные такого типа (запись пользователя плюс токен доступа). Читая спецификацию JSONAPI, я считаю, compound document
был бы способ пойти, но как я могу сделать это с этим драгоценным камнем
2- Как я могу ответить, используя этот драгоценный камень, на не-CRUD маршрут, такой как логин? Должен ли я сделать что-то в контроллере? И как я могу обработать объект ресурса в этом случае?
1 ответ
Нет такой вещи, как нересурсные данные. Вы можете моделировать практически все с точки зрения ресурсов.
Эти ресурсы не должны отображаться непосредственно в таблицы или даже существовать как идентифицируемые объекты в вашем слое постоянства. С точки зрения потребителя API, в основном не имеет значения, является ли представление ресурса фактической строкой базы данных или документом или полностью абстрактной сущностью, созданной по требованию.
Реализация абстрактных ресурсов с использованием JR проста и поддерживается сразу после установки:
Аннотация Ресурсы
Ресурсы, которые не поддерживаются моделью (просто используются в качестве базовых классов для других ресурсов), должны быть объявлены как абстрактные.
Поскольку абстрактные ресурсы не рассчитывают на поддержку модели, они не будут пытаться обнаружить класс модели или какие-либо из его взаимосвязей.
Теперь вернемся к вашим случаям использования:
Это может быть смоделировано как ресурс AuthToken (с одним атрибутом), который связан с (много-к-одному) ресурсом пользователя. И в вашем случае может случиться так, что ваш пользовательский ресурс включен вместе с ресурсом AuthToken в тот же ответ API.
Опять же, если вы моделируете весь свой домен вокруг ресурсов, любые действия можно смоделировать как действия CRUD. Вход - это просто создание ресурса UserSession.
JSON: спецификация API позволяет включать связанные ресурсы:
Включение связанных ресурсов
Конечная точка МОЖЕТ возвращать ресурсы, связанные с первичными данными по умолчанию.
Конечная точка МОЖЕТ также поддерживать параметр запроса включения, чтобы позволить клиенту настроить, какие связанные ресурсы должны быть возвращены.
И эта функция полностью поддерживается JR.