2009-02-21 27 views
5

Tôi đang xem xét sử dụng ASP.Net MVC làm nền tảng cho Dịch vụ dựa trên REST. Tôi biết WCF đã xây dựng hỗ trợ cho các dịch vụ REST; tuy nhiên, tôi đang xem xét trả lại nhiều loại dữ liệu tùy thuộc vào yêu cầu.sử dụng asp.net mvc cho REST dựa trên điểm cuối

Tôi muốn khách hàng yêu cầu loại nội dung. Vì vậy, nếu họ gửi văn bản/html ví dụ tôi sẽ làm cho mô hình của tôi vào Html, nếu họ yêu cầu văn bản/xml nó sẽ trở lại xml. Chúng ta cũng có thể làm JSON.

Có ai thấy bất kỳ sự cố nào với vấn đề này không?

Không sử dụng WCF có thể làm tăng sự phức tạp của khách hàng khi gọi dịch vụ vì họ sẽ không thể tự động tạo proxy; tuy nhiên, trong trường hợp của tôi, khách hàng sẽ là một trong hai trình duyệt yêu cầu html hoặc thư viện máy khách java xử lý xml.

Vì không sử dụng WCF, chúng tôi cần bảo mật dịch vụ; tuy nhiên, tôi nghĩ chúng ta có thể làm điều này bằng cách sử dụng xác thực biểu mẫu.

Lợi ích của việc này là không có vấn đề gì loại dữ liệu khách hàng được yêu cầu đó là tất cả đi qua bộ điều khiển tương tự/mô hình vv ...

Trả lời

2

Sau khi đọc bài đăng của Haack, về việc sử dụng tiện ích mở rộng để biểu thị loại nội dung, tôi nghĩ rằng bạn nên tắt khóa Chấp nhận Tiêu đề. Dường như Rest'ish với tôi, mặc dù đã cấp một chút khó khăn hơn để kích hoạt trình duyệt và kiểm tra url của bạn.

Tôi thông qua cùng một bài viết blog nhỏ về việc này và sử dụng một ModelBinder để trừu tượng hóa HttpContext từ trình điều khiển của bạn: http://jberke.blogspot.com/2009/03/aspnet-mvc-model-binder.html.

Ngoài phản hồi nhận xét chọn tham gia của Troy, tôi đã sử dụng chế độ xem để hiển thị Xml của mô hình của tôi. Điều này cho phép tôi có các định dạng xml khác nhau cho cùng một mô hình. Điều đó có ý nghĩa. Điều gì sẽ xảy ra nếu bạn cần hỗ trợ phiên bản hoặc các định dạng khác nhau cho các máy khách khác nhau. Tôi không thích ý tưởng của khung công tác tự động hiển thị mọi thứ.

2

Bạn có thể muốn xem xét bài viết trên blog này và các cuộc thảo luận sau đây từ Phil Haack:

http://haacked.com/archive/2009/01/06/handling-formats-based-on-url-extension.aspx

mã của mình sử dụng phần mở rộng tập tin yêu cầu (.html, .json, .xml) để xác định đầu ra, nhưng bạn có thể cũng giống như dễ dàng sử dụng Accept-Encoding (hoặc cả hai).

Lưu ý: Tôi để lại nhận xét về bài đăng của Phil và vẫn cảm thấy mạnh mẽ rằng các hành động phải được yêu cầu để "chọn tham gia" đối với phương thức hiển thị nào họ hỗ trợ. Với việc hiển thị HTML, bạn kiểm soát số lượng chế độ xem được hiển thị cho người dùng cuối. Việc hiển thị XML/JSON có thể sẽ hiển thị mọi thứ bạn chuyển vào chế độ xem, bất kể bạn có dự định hiển thị công khai hay không.

3

Giải pháp của Haack chắc chắn không phải là cách tốt nhất để giải quyết nó, mặc dù đây là điểm khởi đầu tốt.

Để bắt đầu, nếu bạn đang làm việc với Entity Framework (hoặc quyết định chuyển từ LINQ sang SQL sau này) JsonResult sẽ phá vỡ vì nó không thể tuần tự hóa đồ thị đối tượng với tham chiếu vòng tròn (thường là hầu hết các mô hình dữ liệu). Thứ hai, nó cho thấy nhiều điểm kết thúc cho cùng một tài nguyên.

Cách chính xác để thực hiện việc này là xem tiêu đề HTTP X-Requested-With để xác định xem đây có phải là yêu cầu XHR hay không. Hoặc Content-Type: text/xml tiêu đề yêu cầu cho XML.

Tôi khuyên bạn nên cài đặt plugin Firefox cho REST testing mô phỏng các yêu cầu XHR. Plugin Tamper Data và một số khác cho phép kiểm soát/gỡ lỗi lớn hơn. WFetch là một công cụ yêu cầu HTTP nguyên trực tiếp cũng cần thiết để thử nghiệm và gỡ lỗi.

Tôi đã viết JSON/POX action filter để thực hiện việc này. Bạn chỉ cần trang trí các lớp hoặc các phương thức của bạn với thuộc tính [JsonPox] và chúng sẽ tự động được hiển thị dưới dạng JSON hoặc XML tùy thuộc vào máy khách.

+0

Tôi đã sử dụng Loại nội dung để biểu thị nếu người dùng muốn xml hoặc Html (Hôm nay tôi thực sự chỉ hỗ trợ Xml). Tôi có kế hoạch để bộ điều khiển của tôi chọn chế độ xem Html hoặc Xml, sau đó chịu trách nhiệm chuyển mô hình thành kết quả. Tôi nghĩ rằng điều này hoạt động độc đáo. Cảm ơn phản hồi và thông tin bổ sung. – JoshBerke

Các vấn đề liên quan