如果我想存档两个不同但相似的功能,是扩展现有的 REST Api url 还是创建另一个更好?

问题描述

我将用一个真实的场景来解释我的观点。我有一堆通知项,以及一个以 json 形式返回所有字段的 API。假设这个api的路由是/api/nots

您也可以指定要搜索用户 ID,以查看是否有任何通知

api/nots?id=1

所有通知都属于一个用户或一组用户。因此,例如从上面的请求返回的 json 将是这样的:

{
"id": 1,"name" : "Notification for John Doe","date": "1-1-2021"
"destinataries" : "[email protected]","readed" : 1
}

“已读”字段是困扰我的一个字段,假设此通知最终会出现在您手机上的列表中,并且根据“已读”字段是否为真,通知中会出现一个绿色勾号。

>

创建时的所有通知都将读取的字段预设为 false,因此我需要一个 api 将该值更改为 true。我有两种方法,但我不知道哪种方法更有效。

一个是创建另一个路由只是为了改变值,在那里你指定通知的id,例如:

api/update-nots?id=123

一个是重用第一个 api (api/nots) 并使其执行两种不同的操作(通过 id 搜索 nots 并更改通知读取值)。

api/nots?set_readed=123

哪种方式更好?

解决方法

如您所知,有很多方法可以做所有事情,在我看来这将是最好的选择:

GET ...api/users/<user_n>/nots // Get all user nots
PUT ...api/nots/<not_n> // Update a specific not.
 payload = { readed: true } 

为什么? 在我看来,更具可读性,因为:api/nots?id=1 实际上,您不知道您的请求是关于第 1 号还是关于用户或群组(为什么不呢?:) )。 所以,保持可读性你的 api,更多的语义。通过上面的例子,你可以理解方法和路由,通过id获取所有用户nots,并更新一个。 通过这种方式,您将使用其他操作扩展您的基本行为,例如“记住我之前”,这可能是带有某个时间标记的更新到其他时间,或者您可以使用 /nots 等来消耗所有 nots。