我正在设计RESTful Web服务以公开SOA体系结构中的功能。服务客户登录到企业内部网,拥有客户名称,ID和其他技术信息(与业务无关)。如何使用客户端信息的服务器端日志记录功能设计RESTful服务
我有一个要求,即所有对RESTful服务的调用都必须被记录下来,并且必须包含客户端的“not business”信息(id,应用程序名称,登录用户等)。
我想收集JSON对象“technicalData”中的所有技术信息和另一个JSON对象“dto”中PUT/POST的业务数据(数据传输对象)。
将此信息放入GET,POST,PUT,DELETE的请求正文中是否正确?
这些信息在GET/DELETE身体没有语意的要求,因为它们只用于登录目的see this answer on SO
例子:
GET /books?author=AUTHOR
{
"technicalData":
{
"id": "...",
"loggedUser": "...",
"applicationName": "..."
}
}
POST /books
{
"technicalData":
{
"id": "...",
"loggedUser": "...",
"applicationName": "..."
}
"dto":
{
...
}
}
PUT /books/ID
{
"technicalData":
{
"id": "...",
"loggedUser": "...",
"applicationName": "..."
}
"dto":
{
...
}
}
DELETE /books/ID
{
"technicalData":
{
"id": "...",
"loggedUser": "...",
"applicationName": "..."
}
}
我认为这是正确的答案,我会接受这一点。最后一个问题是:如果服务提供者已经开发了一个“框架”来读取正文请求的JSON部分中的那些数据?什么是最佳选择:将所有端点更改为POST(违反REST,但考虑到所有请求都是Intranet并且不可索引,可缓存)或迫使提供者遵守更大优点的标准?谢谢您的回答。 – Dinux
您应该在接受其他答案之前留出更多的时间。如果一个人已经被接受,有些人会被劝阻回答。至于你的问题,这是介于基于意见和无法回答之间的问题。我的意见是,如果有一个客户,只有一个客户,你可以做任何你想做的事。我不确定谁是“提供者”在这个问题中,但如果没有那么多的信息,我更喜欢使用标题和/或JWT。 –
你说得过早,但在这种情况下,恕我直言,你给了一个完整的答案,这正是我正在寻找的。事实上,我的客户已经使用JWT令牌,但他决定将所有端点“设计”为POST并将这些数据放在主体中。我对此不满意,但我会活下来。非常感谢。 – Dinux