JSONAPI должен URL-адрес конечной точки в точности соответствовать `типу 'ресурса

Я создаю jsonapi для своего веб-сайта, и, просматривая различные компоненты внешнего интерфейса, я наткнулся на https://github.com/dixieio/redux-json-api/tree/master/docs который, по-видимому, разрешает URL-адрес конечной точки непосредственно из тип ресурса

Является ли частью спецификации / рекомендаций точное разрешение конечной точки по типу ресурса? Я помню, как читал комментарий, объясняющий, что нет фактического type соглашение об именовании.

Мой API имеет несколько конечных точек для регистрации разных типов пользователей.

/registration/admin
/registration/customer
etc.

Эти конечные точки имеют различную бизнес-логику, но все они возвращают user Тип объекта.

  • Это плохой дизайн, когда несколько конечных точек возвращают один и тот же ресурс? type?

  • Должен ли я внести изменения в свой код, чтобы ввести дополнительный тип, как registration/user?

  • Или я должен отправить патч в библиотеку, чтобы он принимал пользовательские URL-адреса конечных точек?

1 ответ

Решение

Я не могу обратиться конкретно к используемой вами платформе, но у вас есть полная свобода выбора того, что представляют собой ваши HTTP-ресурсы. Если, например, клиенты могут быть корпоративными и иметь связанные счета и историю продаж, но администраторы являются только частными лицами и не могут осуществлять транзакции, вы можете убедительно обосновать необходимость разделения ресурсов.

Единственное, чего вам следует избегать, это разрешить программным ограничениям определять структуру вашего URI. Если бы я создавал этот API и решил, что клиенты и администраторы - это разные типы объектов, у меня были бы ресурсы формы регистрации в /admins/new и / Customers/new, которые бы делали POST-запросы к ресурсам коллекции в / admins. и / клиенты. У меня не было бы / регистрации * вообще.

Чтобы ответить на ваши индивидуальные вопросы:

  1. Я не понимаю, что вы подразумеваете под "возвратом типа ресурса" - вы говорите о представлениях, возвращаемых в ответах, или о том, как внутренние функции создают и возвращают экземпляры класса?

  2. Я бы не стал добавлять дополнительный супер-тип для всех видов пользователей. Либо есть одна коллекция для каждого типа, либо один тип для всех.

  3. Если после рассмотрения всего вышеперечисленного и выбора требуемых URI ваше программное обеспечение не может обработать выбранную вами структуру, есть три варианта:
    я) выбрать более способное программное обеспечение
    ii) создайте отображение между входящим URI и URI, переданным вашему программному обеспечению. Apache mod_rewrite может сделать это для вас
    iii) как вы предлагаете, сделать программное обеспечение, которое вы уже используете, более способным

Выберите самый простой вариант.

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