问题描述
我将用一个真实的场景来解释我的观点。我有一堆通知项,以及一个以 json 形式返回所有字段的 API。假设这个api的路由是/api/nots
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。