我正在設計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