" Çok israflı görünüyor ..." diliniz, zamanından önce optimizasyon girişimi olduğunu gösteriyor. Nesnelerin tüm temsilini göndermenin önemli bir performans isabeti olduğu gösterilemediği sürece (kullanıcılara> 150ms olarak kabul edilemez konuşuyoruz), yeni bir standart dışı API davranışı oluşturmaya çalışmanın bir anlamı yoktur. Unutmayın, API ne kadar basit olursa o kadar kolay kullanılır.
Silme işlemleri için, sunucunun silme gerçekleşmeden önce nesnenin durumu hakkında hiçbir şey bilmesine gerek olmadığı için aşağıdakileri gönderin.
DELETE /emails
POSTDATA: [{id:1},{id:2}]
Bir sonraki düşünce, bir uygulama nesnelerin toplu olarak güncellenmesi ile ilgili performans sorunlarıyla karşılaşıyorsa, her bir nesneyi birden çok nesneye bölmeyi düşünmelisiniz. Bu şekilde JSON yükü, boyutun bir kısmıdır.
Örnek olarak, iki ayrı e-postanın "okuma" ve "arşivlenmiş" durumlarını güncellemek için bir yanıt gönderirken aşağıdakileri göndermeniz gerekir:
PUT /emails
POSTDATA: [
{
id:1,
to:"someone@bratwurst.com",
from:"someguy@frommyville.com",
subject:"Try this recipe!",
text:"1LB Pork Sausage, 1 Onion, 1T Black Pepper, 1t Salt, 1t Mustard Powder",
read:true,
archived:true,
importance:2,
labels:["Someone","Mustard"]
},
{
id:2,
to:"someone@bratwurst.com",
from:"someguy@frommyville.com",
subject:"Try this recipe (With Fix)",
text:"1LB Pork Sausage, 1 Onion, 1T Black Pepper, 1t Salt, 1T Mustard Powder, 1t Garlic Powder",
read:true,
archived:false,
importance:1,
labels:["Someone","Mustard"]
}
]
E-postanın değişebilir bileşenlerini (okuma, arşivleme, önem, etiketler) diğerlerine (konudan metne) asla güncellenmeyeceği için ayrı bir nesneye bölerdim.
PUT /email-statuses
POSTDATA: [
{id:15,read:true,archived:true,importance:2,labels:["Someone","Mustard"]},
{id:27,read:true,archived:false,importance:1,labels:["Someone","Mustard"]}
]
Alınacak başka bir yaklaşım, bir PATCH kullanımından faydalanmaktır. Hangi özellikleri güncellemek istediğinizi ve diğerlerinin yoksayılması gerektiğini açıkça belirtmek için.
PATCH /emails
POSTDATA: [
{
id:1,
read:true,
archived:true
},
{
id:2,
read:true,
archived:false
}
]
İnsanlar PATCH işleminin aşağıdakileri içeren bir dizi değişiklik sağlayarak uygulanması gerektiğini belirtir: eylem (CRUD), yol (URL) ve değer değişikliği. Bu standart bir uygulama olarak kabul edilebilir, ancak bir REST API'sinin tamamına bakarsanız, sezgisel olmayan bir kereliktir. Ayrıca, yukarıdaki uygulama GitHub'ın PATCH uygulamasını nasıl gerçekleştirdiğidir .
Özetlemek gerekirse, toplu eylemlerle RESTful ilkelerine uymak ve hala kabul edilebilir bir performansa sahip olmak mümkündür.