[英]Rest api design: how to design api to block different type of communication?
我們有一個電子商務網站,用戶可以在此注冊。 為了避免垃圾郵件,我們希望創建API以阻止某些手機號碼,IP,IMEI。 我們對兩種API設計感到困惑:
創建API來阻止這些通信,即單個API能夠阻止IP / Mobile / IMEI
POST / api / blockcommunication /
在POST請求主體中,它接收具有以下信息的對象數組:
即類型:哪種阻止類型是數字1,IP 2,IMEI 3
AND值:即,如果type為1,則期望為數字。 如果類型為2,則需要IP。 如果type為3,則期望IMEI。
創建單獨的API,即POST / api / blockmobile,POST / api / blockip /。 這些API在其請求正文中分別包含移動設備和IP的數組。
方法1的優點是,我們具有阻止任何內容的中央API,並且可以將其擴展為進一步阻止電子郵件,whatsapp-communication等。但這會隨着添加更多請求字段而變得更加復雜。 Approach2可能沒有阻止通訊的中心點,但看起來很簡潔。
這2個中哪個更好,還是有其他任何一種設計此類api的方法?
我想說第一種方法將具有更大的可擴展性,但有成為巨大的整體決策塊的風險。 中央API可以從數據中算出類型嗎? 即可以算出它是IP,移動還是IMEI? 如果是這樣,則不發送類型,僅發送數據並讓中央API決定如何處理它。 這樣,您可以添加更多類型,而無需阻止這些事情的客戶端知道新類型,而只是發送數據。
然后,您可以將兩種API方法結合起來進行擴展。 一旦確定了類型,中央API然后將其發送到/ api / blockmobile等。
因此,客戶只需說“我不想再看到這個”,中央API就會確定它是什么類型,然后發送給該類型阻止API
我認為諸如/api/blocked-clients
類的終結點可以解決問題。
對必須阻止的客戶端表示執行POST
請求。 據我了解,您可以發送type
和value
屬性:
POST /api/blocked-clients
Host: example.org
Content-Type: application/json
{
"type": "ip",
"value": "0.0.0.0"
}
如果操作成功,則響應應包含201
狀態代碼和帶有URI的Location
標頭,該URI標識新創建的資源,例如/api/blocked-clients/{id}
(其中{id}
是唯一標識符)。
您還可以在/api/blocked-clients
端點中支持GET
操作,因此可以獲得所有已被阻止的客戶端的表示。 響應將類似於:
[
{
"id": "1",
"type": "ip",
"value": "0.0.0.0"
},
{
"id": "2",
"type": "imei",
"value": "000000000000"
}
]
您還可以在/api/blocked-clients/{id}
端點中支持DELETE
操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.