Tôi đang tạo API REST và tôi đã chơi với ý tưởng cho phép nhóm các yêu cầu từ khách hàng. Bằng cách nhóm, tôi có nghĩa là họ có thể gửi một yêu cầu, chứa nhiều yêu cầu "thực" và chúng được gửi đến khách hàng cùng nhau. Thông thường yêu cầu ajax javascript. Một cái gì đó như thế này:Yêu cầu API gộp
POST /bundlerequest
["/person/3243", "/person/3243/friends", "/comments/3243?pagesize=10&page=1", "/products", "/product/categories" ]
(Yêu cầu kèm chỉ có thể yêu cầu GET, tính đến nay ít nhất) này được thiết kế để trở lại một cái gì đó như thế này
{
"success" : ["/person/3243", "/person/3243/friends", "/comments/3243?pagesize=10&page=1", "/products", "/product/categories" ],
"error" : [],
"completiontime" : 94,
other relevant metadata...
"responses" : [
{"key" : "/person/3243" , "data" : {"name" : "John", ...} },
{"key" : "/person/3243/friends" , "data" : [{"name": "Peter", "commonfriends" : 5, ...}] },
etc...
]
}
Những lợi ích của bó này là nó làm giảm số lượng yêu cầu và điều đó đặc biệt quan trọng trên thiết bị di động chẳng hạn.
Câu hỏi đầu tiên của tôi là, cách tiếp cận của tôi là tốt nhất? Có ai có kinh nghiệm làm việc như thế này không?
AFAIK cách phổ biến để giải quyết điều này là viết mã phía máy chủ để trả về dữ liệu kết hợp, mà tôi tin là có liên quan cho (các) khách hàng. (Ví dụ, luồng người dùng twitter thực hiện điều này, kết hợp thông tin người, tin nhắn mới nhất, tin nhắn cá nhân mới nhất, v.v.) Nhưng điều này làm cho API rất quan tâm và khi khách hàng cần thay đổi, máy chủ có thể cần thay đổi để chứa tối ưu.
Và câu hỏi thứ hai là cách triển khai điều này?
Phần cuối của tôi là ASP.NET MVC 3 và IIS 7. Tôi có nên triển khai nó trong ứng dụng, có hành động bundlerequest gọi nội bộ các hành động khác được chỉ định trong yêu cầu không?
Có thể triển khai trực tiếp trong IIS 7 không? Viết một mô-đun minh bạch chặn các yêu cầu đến/bundlerequest và sau đó gọi tất cả các yêu cầu phụ tương ứng, làm cho ứng dụng hoàn toàn không biết về gói xảy ra? Điều này cũng sẽ cho phép tôi thực hiện điều này theo cách ứng dụng bất khả tri.
Điều này nghe có vẻ như một ý tưởng hay. –
Có phải tất cả các url đó đều chỉ trả về JSON không? Hoặc một số có thể trả lại phần nội dung HTML và các nội dung khác? –
@DarinDimitrov chỉ có JSON, tuy nhiên tôi thấy các vấn đề tiềm năng với người dùng bị đăng xuất hoặc không có quyền truy cập vào các phần của API chẳng hạn, và sau đó có thể chuyển hướng đến trang đăng nhập. Đây là những vấn đề tôi sẽ phải giải quyết. –