【发布时间】:2018-05-10 02:15:27
【问题描述】:
目前,我正在开发新产品并为公共和内部需求制作 REST API。我从 {json:api} 规范开始,我对它非常满意,直到遇到一些我无法找到答案的问题。
根据 JSON API 规范,每个资源必须包含id。
每个资源对象都必须包含一个 id 成员和一个 type 成员。 id 和 type 成员的值必须是字符串。
这在很多情况下都很好,但不是全部。
我们的大多数端点都是关于“资源”的
如果我要一个“东西”集合 (http://example.com/things)
{
"data": [{
"type": "things",
"id": "1",
"attributes": {
"title": "first"
},
"links": {
"self": "http://example.com/things/1"
}
}, {
"type": "things",
"id": "1",
"attributes": {
"title": "second"
},
"links": {
"self": "http://example.com/things/2"
}
}]
}
如果我要求一个“事物”资源 (http://example.com/things/1)
{
"data": {
"type": "things",
"id": "1",
"attributes": {
"title": "first"
},
"links": {
"self": "http://example.com/things/1"
}
}
}
但是如何处理与资源无关且没有 ID 的端点?
例如,在我们的应用程序中,有一个端点http://example.com/stats 应该返回当前登录用户的统计信息。喜欢
{
"active_things": 23,
"last_login": "2017"
}
这个“资源”没有 id(它实际上不是资源,是吗?)。后端只是为登录用户收集一些“统计信息”并返回一个统计对象。在这个应用程序中有很多这样的端点,例如,我们有 通知中心 页面,用户可以在其中更改不同通知的电子邮件地址。
所以前端应用程序(单页应用程序)首先必须获取当前值并将请求发送到GET http://example.com/notification-settings。
{
"notifications_about_new_thing": "arunas@example.com",
"notification_about_other_thing": "arunas@example.com"
}
还有更多这样的端点。问题是 - 如何以 JSONAPI 格式返回这些响应?这些端点中没有 ID。
最大的问题是 - 为什么没有其他人面临这个问题(至少我找不到任何关于这个的讨论)? :D 我做过的所有 API 都有一些没有“id”的端点。
我有两个想法,第一个是伪造id,比如"id": "doesnt_matter",第二个——不要对这些端点使用json-api。但我不喜欢他们两个。
【问题讨论】:
-
对于当前登录用户的示例,id 不能是用户 ID 吗?
-
不要使用 json-api。
-
@NathanHughes 是的,它可以.. 但我不喜欢它:)) 然后我也应该向
http://example.com/stats/<user-id>发送请求?.. -
@Quazer 不将其用于这些端点或根本不使用它?
-
@ArūnasSmaliukas 如果使用 JSONAPI 作为先验的外部系统没有连接到您的项目 - 不要使用 JSONAPI。使用自己的 JSON。 C# 的端点 - RestRequest、Python - 请求。
标签: rest api json-api jsonapi-resources