REST:如何 return 返回下一个动作 url 作为响应 body?
REST: How to return back the next action url in response body?
我们创建了一个 API 来获取用户详细信息。要获取任何特定用户的详细信息,需要输入经过验证的号码。
API 看起来像:
GET /api/details/?number=983984348&userid=123
这里的 userid 是我们需要的详细信息的用户 ID,编号是 mobile-number 想要获取这些详细信息的人。如果该号码得到验证,我们将返回 user 123
的详细信息。如果号码未通过验证,我们会将状态发回为未验证。
如果客户端返回未验证状态,客户端需要点击验证API。 API 看起来像:
/api/verify/?number=983984348
一旦这个API被命中,客户端得到URL需要被命中来验证。
目前,我们在每个客户端都有 hard-coded 这个 API url /api/verify/?number=983984348
但是根据 HATEOAS
这是不正确的,因为它建议应该被引导按服务器。
我不知道这个 API url 应该如何从客户端发送到服务器,即使用简单响应 body 或响应 headers?有人可以解释一下如何将这种导航从服务器引导到客户端吗?
想想你的问题的范围,如果你点击了 /api/details/?number=983984348&userid=123
uri,它告诉客户这个号码没有被验证,那么你也可以在 body 中包含响应要使用的 URI。
示例(使用 HAL,编码为 JS 而不是 JSON,但同样适用于其他超媒体格式):
{
_links : {
self : { href: '/api/details/?number=983984348&userid=123' },
verify : { href: '/api/verify/?number=983984348' }
}
verified: false
}
HTTP Link header 也可以工作:
Link: </api/verify/?number=983984348>; rel="verify"
在我们的例子中,我们构建了一个 open-source javascript REST 客户端,它支持 header 或 hal _link
,并且不关心它是哪一个。我们的客户会做这样的事情:
var client;
// usually you'll want to discover this url as well.
var user = await client.getResource('/api/verify/?number=983984348');
var userBody = await client.get();
if (!userBody.verified) {
var verifyResource = await userBody.follow('verify');
// verifyResource.put() might come next?
}
不确定最后一点是否有帮助,但它帮助我思考了这个问题。
我们创建了一个 API 来获取用户详细信息。要获取任何特定用户的详细信息,需要输入经过验证的号码。
API 看起来像:
GET /api/details/?number=983984348&userid=123
这里的 userid 是我们需要的详细信息的用户 ID,编号是 mobile-number 想要获取这些详细信息的人。如果该号码得到验证,我们将返回 user 123
的详细信息。如果号码未通过验证,我们会将状态发回为未验证。
如果客户端返回未验证状态,客户端需要点击验证API。 API 看起来像:
/api/verify/?number=983984348
一旦这个API被命中,客户端得到URL需要被命中来验证。
目前,我们在每个客户端都有 hard-coded 这个 API url /api/verify/?number=983984348
但是根据 HATEOAS
这是不正确的,因为它建议应该被引导按服务器。
我不知道这个 API url 应该如何从客户端发送到服务器,即使用简单响应 body 或响应 headers?有人可以解释一下如何将这种导航从服务器引导到客户端吗?
想想你的问题的范围,如果你点击了 /api/details/?number=983984348&userid=123
uri,它告诉客户这个号码没有被验证,那么你也可以在 body 中包含响应要使用的 URI。
示例(使用 HAL,编码为 JS 而不是 JSON,但同样适用于其他超媒体格式):
{
_links : {
self : { href: '/api/details/?number=983984348&userid=123' },
verify : { href: '/api/verify/?number=983984348' }
}
verified: false
}
HTTP Link header 也可以工作:
Link: </api/verify/?number=983984348>; rel="verify"
在我们的例子中,我们构建了一个 open-source javascript REST 客户端,它支持 header 或 hal _link
,并且不关心它是哪一个。我们的客户会做这样的事情:
var client;
// usually you'll want to discover this url as well.
var user = await client.getResource('/api/verify/?number=983984348');
var userBody = await client.get();
if (!userBody.verified) {
var verifyResource = await userBody.follow('verify');
// verifyResource.put() might come next?
}
不确定最后一点是否有帮助,但它帮助我思考了这个问题。