gpt4 book ai didi

用于查询和命令操作的 REST URI 模板

转载 作者:行者123 更新时间:2023-12-04 14:48:02 26 4
gpt4 key购买 nike

我们有一个应用程序,它分为两部分:

  • 管理员 - 更改数据的位置
  • 公共(public) - 读取数据的位置

  • 我正在考虑创建一个 REST API 来提供此功能。很容易看出如何表示 CRUD 操作,但我不确定单个资源上的特定操作(命令)。例如“发布”一个 Project我们发送一个“PublishCommand”。我们没有把完整的 Project返回服务器及其 Published属性设置为 true .

    同样,我有点困惑,我们应该如何表示更高级的资源查询操作而不被归类为 RPC 类型服务。

    下面我列出了我的 Project 的 URI 模板。资源。我是否走上了创建真正 RESTful API 的正确轨道?
    ADMIN API
    ---------

    // Project Resources
    GET /projects -- get all projects
    POST /projects -- create a new project

    // Project Resource
    GET /projects/10 -- get project with id 10
    PUT /projects/10 -- update project with id 10
    DELETE /projects/10 -- delete project with id 10

    // Project Resource Operations
    POST: /projects/10/publish -- publish project with id 10
    POST: /projects/10/unpublish -- unpublish project with id 10
    POST: /projects/10/setposition/2 -- move to position 2 in projects list

    // Project Sub resources (identity is local to project)
    POST: /projects/10/media -- adds media to project with id 10
    PUT: /projects/10/media/5 -- updates media id 5 for project id 10
    DELETE: /projects/10/media/5 -- deletes media id 5 from project id 10

    PUBLIC API
    ----------

    GET: /projects -- gets all projects (with default limit e.g. first 10)
    GET: /projects?skip=10&take=10 -- gets projects 11 to 20
    GET: /projects/tagged/rest OR /taggedprojects/rest -- gets projects tagged with "REST"
    GET: /projects?orderbydesc=publishdate OR /latestprojects -- gets latest projects

    GET: /projects/10 -- gets project with id 10

    最佳答案

    我不认为 REST 旨在仅代表 CRUD 操作。您的界面对我来说看起来不错,我相信您走在正确的轨道上。

    网上有个关于 DDD 和 REST 的讨论:RESTful SOA or Domain-Driven Design - A Compromise?通过沃恩弗农。

    更新 包括我在下面发表的评论:

    您可以使用 GET 查询您的读取模型。要改变您的域,您可以 PUT 或 POST 到表示命令的资源。这将提供超越 CRUD 的域模型的丰富性,并且仍然使用 HTTP 的固有语义。

    关于用于查询和命令操作的 REST URI 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11542064/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com