我想描述一個API,它有一些字段,允許不同的方式在POST一個項目時定義值,但只以某種特定方式在字段中輸出。JSON Hyper-Schema:GET和POST的不同模式
例如,我可能想描述一個API,其中可以像這樣創建或更新一個項目:{"name": "Task", "due": "2014-12-31"}
或者像這樣:{"name": "Task", "due": {"$date": 1419984000000}}
,但它只能以第一種方式從API返回。
的POST/PUT架構因此可以:
{
"type": "object"
"properties": {
"name": {
"type": "string"
},
"due": {
"oneOf": [
{
"type": "string",
"format": "date"
},
{
"type": "object",
"properties": {
"$date": {
"type": "number"
}
},
"required": ["$date"],
"additionalProperties": false
}
]
}
}
}
儘管架構通過GET訪問就會簡單得多:
{
"type": "object"
"properties": {
"name": {
"type": "string"
},
"due": {
"type": "string",
"format": "date"
}
}
}
這將是很好的API的消費者知道他們只需要考慮一種可能的輸出方法,而不是所有的方法。
是否有任何可接受的標準方法來指定JSON超架構上下文中的不同架構?我想過通過"links"
屬性來指定這些差異,但我不知道我會在什麼下定義這些模式,它看起來非常不標準。
正確,但是這個('「create」')僅用於創建一個項目,不用於更新一個和'「更新」不在標準中。 – lyschoening 2014-09-11 19:25:38
更新不是有效的關係類型。請看看下面的RFC:http://www.rfc-editor.org/rfc/rfc5988.txt我認爲你正在將關係類型與CRUD操作相混淆。看起來你需要「rel」:「self」和「href」:「{id}」或其他標識將要更新的資源的URI。 – jruizaranguren 2014-09-11 20:59:51
我想標準關係會是[「編輯」](http://tools.ietf.org/html/rfc5023#section-11.1),即使那個也很模糊。如果「rel」:「self」可能會重複兩次(我不確定是否可以),可能會出現正常的「method」:「GET」,另一個用「POST」方法更新。 – lyschoening 2014-09-12 09:27:17