2016-03-31 3 views
0

Я использую библиотеку Katharsis на моем сервере Spring Boot для автоматического создания интерфейса JSON-API.Katharsis Json Api ограничивает PATCH

Предположим, у меня есть конечная точка (ресурс)/ресурс, для которой я хотел бы предложить метод POST (для создания новых ресурсов), но ограничить PATCH (чтобы ограничить обновление ресурсов). Между тем, io.katharsis.repository.ResourceRepository предлагает только метод save(), который применяется как к POST, так и к PATCH.

Моя единственная идея на данный момент - добавить еще один фильтр в FilterChain, который запретит PATCHing нужной конечной точке.

Есть ли лучшие (т. Е. Более короткие или более элегантные) способы достижения этого?

ответ

0

Чтобы отключить метод PATCH вы должны следовать шагам:

  1. Проверьте, если в базе данных существует объект с идентификатором, представленный в запрашиваемом URL
  2. Если объект существует, бросить UnsupportedOperationException
+0

Спасибо за подсказку! Разве это так JsonApi рекомендует? Я сомневаюсь: зачем мне даже спрашивать базу данных? Я знаю, что PATCH не поддерживается вообще, независимо от того, что находится в базе данных. Таким образом, это звучит как один дополнительный вызов базы данных, который можно пропустить, не так ли? После того, как я снова прочитал свой вопрос - может быть, недостаточно ясно, я исправлю его. – ppi

+0

Кроме того, я был бы очень признателен за короткое объяснение, почему это решение лучше, чем добавление фильтра. Заранее спасибо! – ppi

+0

Использование фильтра будет более подходящим, если вы хотите отключить патч для всех запросов, и я предполагаю, что вы не хотите этого делать. Учитывая пропущенный первый шаг - в случаях производственного развертывания с огромными объемами транзакций и запросов, предположительно, только уровень БД будет знать, действительно ли объект уже существует. Это в основном для согласованности данных. – masterspambot

0

заплата содержит идентификатор.
Итак, вы можете проверить, если ID! = Null и вместо этого выдать ошибку.
Таким образом, вам не нужно проверять базу данных.
Это решение предполагает, что вы не создадите идентификатор на клиенте.

+0

Спасибо, хорошая идея. В нашем API фактически разрешено как POST ресурс/{id}, так и Ресурс PATCH/{id}. Итак, как вы написали, это не сработает. Честно говоря, я остался с фильтром (соответствующим каждому запросу PATCH/resource request) для запроса базы данных. – ppi

 Смежные вопросы

  • Нет связанных вопросов^_^