Ngôn ngữ của bạn, "Có vẻ rất lãng phí ...", với tôi cho thấy nỗ lực tối ưu hóa sớm. Trừ khi có thể chứng minh rằng việc gửi toàn bộ đại diện của các đối tượng là một điểm nhấn hiệu suất lớn (chúng tôi đang nói không thể chấp nhận được với người dùng là> 150ms) thì không có ý định tạo hành vi API không chuẩn mới. Hãy nhớ rằng, API càng đơn giản thì càng dễ sử dụng.
Để xóa, hãy gửi như sau vì máy chủ không cần biết gì về trạng thái của đối tượng trước khi xóa.
DELETE /emails
POSTDATA: [{id:1},{id:2}]
Ý nghĩ tiếp theo là nếu một ứng dụng đang gặp vấn đề về hiệu năng liên quan đến việc cập nhật hàng loạt đối tượng thì nên xem xét việc chia từng đối tượng thành nhiều đối tượng. Bằng cách đó, tải trọng JSON là một phần nhỏ của kích thước.
Ví dụ khi gửi phản hồi để cập nhật trạng thái "đã đọc" và "đã lưu trữ" của hai email riêng biệt, bạn sẽ phải gửi như sau:
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"]
}
]
Tôi sẽ tách các thành phần có thể thay đổi của email (đọc, lưu trữ, tầm quan trọng, nhãn) thành một đối tượng riêng biệt vì các đối tượng khác (đến, từ, chủ đề, văn bản) sẽ không bao giờ được cập nhật.
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"]}
]
Một cách tiếp cận khác là sử dụng đòn bẩy. Để chỉ rõ ràng những thuộc tính nào bạn định cập nhật và tất cả những thuộc tính khác nên được bỏ qua.
PATCH /emails
POSTDATA: [
{
id:1,
read:true,
archived:true
},
{
id:2,
read:true,
archived:false
}
]
Mọi người tuyên bố rằng nên thực hiện PATCH bằng cách cung cấp một loạt các thay đổi có chứa: hành động (CRUD), đường dẫn (URL) và thay đổi giá trị. Đây có thể được coi là một triển khai tiêu chuẩn nhưng nếu bạn xem xét toàn bộ API REST thì đó là một lần không trực quan. Ngoài ra, cách thực hiện ở trên là cách GitHub đã triển khai PATCH .
Tóm lại, có thể tuân thủ các nguyên tắc RESTful với các hành động hàng loạt và vẫn có hiệu suất chấp nhận được.