JSONAPI лучший способ для ответа на нересурсные данные, такие как токен доступа, с помощью jsonapi-ресурсов

Я реализую этот API, и первое, что я сделал, - это логин с токеном доступа. Я использую гем jsonapi-resources https://github.com/cerebris/jsonapi-resources

У меня сейчас две проблемы. Я хочу вернуть пользователя И сгенерированный токен доступа в случае успеха и сообщение об ошибке в противном случае.

Теперь у меня есть две проблемы:

1- Во-первых, как я могу вернуть данные такого типа (запись пользователя плюс токен доступа). Читая спецификацию JSONAPI, я считаю, compound document был бы способ пойти, но как я могу сделать это с этим драгоценным камнем

2- Как я могу ответить, используя этот драгоценный камень, на не-CRUD маршрут, такой как логин? Должен ли я сделать что-то в контроллере? И как я могу обработать объект ресурса в этом случае?

1 ответ

Нет такой вещи, как нересурсные данные. Вы можете моделировать практически все с точки зрения ресурсов.

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

Реализация абстрактных ресурсов с использованием JR проста и поддерживается сразу после установки:

Аннотация Ресурсы

Ресурсы, которые не поддерживаются моделью (просто используются в качестве базовых классов для других ресурсов), должны быть объявлены как абстрактные.

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

Теперь вернемся к вашим случаям использования:

  1. Это может быть смоделировано как ресурс AuthToken (с одним атрибутом), который связан с (много-к-одному) ресурсом пользователя. И в вашем случае может случиться так, что ваш пользовательский ресурс включен вместе с ресурсом AuthToken в тот же ответ API.

  2. Опять же, если вы моделируете весь свой домен вокруг ресурсов, любые действия можно смоделировать как действия CRUD. Вход - это просто создание ресурса UserSession.

JSON: спецификация API позволяет включать связанные ресурсы:

Включение связанных ресурсов

Конечная точка МОЖЕТ возвращать ресурсы, связанные с первичными данными по умолчанию.

Конечная точка МОЖЕТ также поддерживать параметр запроса включения, чтобы позволить клиенту настроить, какие связанные ресурсы должны быть возвращены.

И эта функция полностью поддерживается JR.

Другие вопросы по тегам