Dịch vụ dữ liệu WCF (OData) Vs API Web ASP.NET? Hypermedia?


12

Tôi đang mong muốn một ứng dụng phân tán sẽ bao gồm các dịch vụ REST và nhiều ứng dụng khách khác nhau (Silverlight, iOS, Windows Phone 7, v.v.). Tôi đã sẵn sàng quyết định rằng tôi sẽ triển khai các dịch vụ REST của mình bằng cách sử dụng Dịch vụ dữ liệu WCF (OData) nhưng bây giờ API Web MVC 4 đã khiến tôi đặt câu hỏi về quyết định đó.

Điều tôi thích về OData là các khả năng truy vấn và tăng cường URI mà bạn nhận được miễn phí. Điều tôi không thích là tính dài dòng của tải trọng OData; rất nhiều nhân vật không cần thiết đến trên dây.

Điều tôi thích về API Web là các tải trọng ngắn gọn hơn nhiều và nó có khả năng truy vấn URI của OData, tuy nhiên, dường như nó thiếu hypermedia (ít nhất là ngoài hộp). Sếp của tôi cũng đang thúc đẩy API Web vì "các quyền lực tại Microsoft đang ủng hộ nó và OData đã không nhận được lực kéo."

Vì vậy, tôi có hai câu hỏi:

1) Có ai có thể nhận xét về sự ủng hộ / lực kéo của API Web và OData không?

2) API Web dự kiến ​​sẽ hỗ trợ hypermedia theo thời gian phát hành hay có bất kỳ triển khai hoặc ví dụ nào tôi nên xem xét không?

Cảm ơn!


2
Câu trả lời tốt cho câu hỏi 1 cho đến nay. Bất cứ ai có cái nhìn sâu sắc về câu hỏi thứ hai của tôi?
Raymond Saltrelli

Kinda đã bỏ lỡ điều đó, và tôi đã thấy thuật ngữ này nhưng tôi không chắc hypermedia là gì theo nghĩa kỹ thuật - bạn có liên kết không?
Wyatt Barnett

2
Về cơ bản, hypermedia trong ngữ cảnh của REST có nghĩa là "tải chậm". Ví dụ: nếu yêu cầu của bạn đối với dịch vụ REST trả về một đối tượng có tham chiếu đến đối tượng khác, thì các tham chiếu đó được biểu diễn dưới dạng một liên kết trong tài liệu XML trái ngược với việc bao gồm toàn bộ đối tượng được tham chiếu. Nếu bạn muốn thông tin về đối tượng được tham chiếu, chỉ cần theo liên kết. dret.net/lectures/ppos-spring11/reading/ từ
Raymond Saltrelli

1
Một mô tả hay khác về hypermedia liên quan đến REST. timelessrepo.com/haters-gonna-hateoas
Raymond Saltrelli

Câu trả lời:


2

API Web không odata. Xem bài viết trên blog của Scott Guthrie . Đặc biệt:

Thành phần truy vấn: API Web cho phép bạn dễ dàng hỗ trợ truy vấn thông qua các quy ước URL OData. Khi bạn trả về một loại IQueryable từ API Web của mình, khung sẽ tự động cung cấp hỗ trợ truy vấn OData cho nó - giúp dễ dàng thực hiện phân trang và sắp xếp.

Tôi cũng nghĩ rằng trong nhiều trường hợp, cùng một lớp có thể là lớp WCF truyền thống và lớp API Web, chúng chắc chắn không loại trừ lẫn nhau.


2

API Web tận dụng giao thức http nguyên bản hơn. Odata là một tiêu chuẩn mở được chấp nhận bởi rất nhiều người chơi lớn. Tôi chỉ có thể nói từ kinh nghiệm của mình khi chơi đùa với Odata và gần đây đã khám phá API Web và thực hiện một số nghiên cứu.

OData rất tuyệt vì đó là một tiêu chuẩn thực tế. Bạn có thể dễ dàng tạo cơ sở dữ liệu và hiển thị nó qua HTTP. Điều này có nghĩa là bạn có thể duyệt qua cấu trúc bảng của mình mà không cần bất kỳ cấu hình nào (tôi nói điều đó một cách lỏng lẻo). Bạn cũng có thể chạy các truy vấn thông qua URL có thể bao gồm một số LINQ nhẹ:

/products/orders/[put some linq-ish query here]

Điều này được cho là tốt hay xấu. Xác thực là tiêu chuẩn và xây dựng nó.

API Web, thú vị hơn từ quan điểm của tôi. Nó sử dụng chức năng HTTP (thông báo lỗi và cộng sự) và "bản địa" hơn một chút so với các yêu cầu RESTful thực sự. Tôi thực sự đã không chơi với nó quá nhiều .. Nhưng tôi đã đọc xung quanh và có loại "nghe nói" rằng MVC và Web API có thể "kết hôn" một ngày nào đó, một lần nữa, có thể tốt có thể xấu ...

Khi tôi đang chơi với OData, tôi đã tạo một Stored Proc, đã gắn nó vào bề mặt thực thể, định cấu hình loại trả về mạnh và sau đó nối nó với một yêu cầu URL và BANG, có yêu cầu RESTful của tôi được ánh xạ tới kết quả được lưu trữ của tôi. Nó khá đơn giản và tôi có thể nhận được chính xác những gì tôi cần.

Kết luận Tôi chưa có cơ hội chơi với API WCF quá nhiều chi tiết, nhưng tôi sẽ nói rằng đó là cách để phát triển ứng dụng khách vì đây là cách tiếp cận thuần túy hơn với REST. Nếu bạn sẽ thực hiện nhiều hơn hoặc ít hơn các cuộc gọi qua lại "thẳng" và truy xuất "Xem mô hình", nó sẽ cung cấp một tương tác nguyên gốc hơn.

Mặt khác. Nếu bạn sẽ thực hiện các truy vấn (ish) phức tạp trên dữ liệu dựa trên tương tác máy khách và bạn muốn "xây dựng" logic truy vấn và chuyển nó dưới dạng tham số, thì Odata có thể hoạt động.

Cách tôi nhìn nhận là nếu tôi cần phơi bày dữ liệu của mình ở định dạng cấu trúc (nghĩa là cấu trúc bảng / mối quan hệ) và sau đó truy vấn nó trực tiếp từ máy khách, thì Odata sẽ hoạt động tốt nhất. Cũng tốt khi cho phép "Người khác" truy cập dữ liệu (với quyền xác thực, v.v.), đó là lý do tại sao nó tuân thủ giao thức OData

Nếu bạn muốn các yêu cầu RESTful khi bạn ra lệnh URL (/ sản phẩm / đơn hàng / 22 và tạo "tập kết quả" phức tạp từ cấu trúc dữ liệu và mã được quản lý "ẩn" của bạn VÀ bạn cũng có thể được hưởng lợi từ các thông báo phản hồi HTTP, sau đó API Web có lẽ sẽ là lựa chọn tốt nhất ..

một lần nữa, đây là tất cả từ nghiên cứu và đồ chơi. Tôi đã không thực hiện hoặc trong một kịch bản ứng dụng sản xuất / đầy đủ. Tôi nghĩ rằng cả hai sẽ có điểm mạnh và điểm yếu, và chắc chắn có một số chồng chéo


2

Từ quan điểm hypermedia chắc chắn API Web. OData, dựa trên AtomPub, chỉ là một cách để lộ cơ sở dữ liệu bằng HTTP, bạn chỉ nhận được một bộ hạn chế chuyển trạng thái được xác định trước (CRUD). Mặt khác, một dịch vụ hypermedia giống như một ứng dụng, được thiết kế riêng cho khách hàng. Với API Web, bạn có thể nhúng tất cả các liên kết bạn muốn, ngoài ra bạn cũng có thể sử dụng cú pháp truy vấn OData. Trên thực tế, giải pháp hypermedia tốt nhất trong Microsoft stack là ASP.NET MVC, nếu bạn sẵn sàng sử dụng HTML làm định dạng cơ sở.


2
Có bất kỳ ví dụ trực tuyến nào về cách triển khai điều này bằng API Web không?
Raymond Saltrelli


Bạn vẫn ủng hộ ý kiến ​​này với việc bổ sung các hành động trong odata v3 ( odata.org/media/30002/OData.html#ilities )?
Chris DaMour
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.