【问题标题】:Katharsis Json Api restrict PATCHKatharsis Json Api 限制 PATCH
【发布时间】:2016-07-20 01:12:31
【问题描述】:

我在我的 Spring Boot 服务器中使用 Katharsis 库来自动构建 JSON-API 接口。

假设我有一个端点(资源)/资源,我想为此提供 POST 方法(以创建新资源)但限制 PATCH(以限制资源更新)。 同时,io.katharsis.repository.ResourceRepository 只提供了 save() 方法,它适用于 POST 和 PATCH。

我目前唯一的想法是向 FilterChain 添加另一个过滤器,这将不允许 PATCHing 所需的端点。

有没有更好(即更短或更优雅)的方法来实现这一点?

【问题讨论】:

    标签: java spring-boot json-api katharsis


    【解决方案1】:

    PATCH 包含一个 ID。
    因此,您可以检查 ID != null 是否并引发错误。
    这样你就不需要检查数据库了。
    此解决方案假定您不在客户端生成 id。

    【讨论】:

    • 谢谢,好主意。在我们的 API 中,实际上允许 POST 资源/{id} 和 PATCH 资源/{id}。所以,正如你写的那样,这个是行不通的。老实说,我一直使用过滤器(匹配每个 PATCH /资源请求)解决方案来避免数据库查询。
    【解决方案2】:

    要禁用 PATCH 方法,您应该按照以下步骤操作:

    1. 检查数据库中是否存在具有请求 URL 中提供的 ID 的对象
    2. 如果对象存在,则抛出UnsupportedOperationException

    【讨论】:

    • 感谢您的提示!这是 JsonApi 以某种方式推荐的方式吗?我的疑问是:我为什么还要问数据库?我知道 PATCH 根本不受支持,无论数据库中有什么。所以,这听起来像是一个可以跳过的额外数据库调用,对吧?再次阅读我的问题后 - 可能不够清楚,我会更正它。
    • 另外,即使是简短的解释,我也将不胜感激,为什么这个解决方案比添加过滤器更好。提前致谢!
    • 如果您想为所有请求禁用补丁并且我假设您不想这样做,则使用过滤器会更合适。考虑跳过第一步 - 在具有大量事务和请求的生产部署案例中,大概只有 DB 层会知道对象是否真的已经存在。主要是为了数据的一致性。
    • 再次感谢。我决定接受这个答案,只要没有其他选择。确实可以认为比Filter更优雅
    猜你喜欢
    • 2017-02-06
    • 2020-11-04
    • 2017-04-02
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2014-04-25
    • 2017-01-14
    相关资源
    最近更新 更多