WCF Veri Hizmetleri (OData) Vs ASP.NET Web API? Hiper medya?


12

REST hizmetleri ve çeşitli istemcilerden (Silverlight, iOS, Windows Phone 7, vb.) Oluşacak dağıtılmış bir uygulama tasarlıyorum. WCF Veri Hizmetleri'ni (OData) kullanarak REST hizmetlerimi uygulayacağım konusunda karar vermeye hazırdım, ancak şimdi MVC 4 Web API bana bu kararı sorguladı.

OData hakkında ne sevdim URI sorgulama ve ücretsiz almak için hipermedya yetenekleri oldu. Sevmediğim şey, OData yükünün ayrıntısıydı; telin üzerinden gelen birçok gereksiz karakter.

Web API hakkında ne gibi yükleri çok daha özlü ve OData URI sorgulama yeteneğine sahip, ancak hipermedia (en azından kutunun dışında) gibi görünüyor. Patronum da Web API için baskı yapıyor çünkü "Microsoft'taki güçler onu destekliyor ve OData çekişiyor değil."

İki sorum var:

1) Herkes Web API ve OData desteği / çekişi hakkında yorum yapabilir mi?

2) Web API'sının yayın zamanına göre yerel olarak hiper medyayı desteklemesi bekleniyor mu veya incelemem gereken herhangi bir hazır uygulama veya örnek var mı?

Teşekkürler!


2
Soru 1 için şimdiye kadar iyi cevaplar. İkinci sorumla ilgili bir fikriniz olan var mı?
Raymond Saltrelli

Bunu kaçırdım ve terimi gördüm ama teknik anlamda hangi hiper ortamın olduğundan emin değilim - bir bağlantınız var mı?
Wyatt Barnett

2
Temel olarak, REST bağlamında hiper ortam "tembel yük" anlamına gelir. Örneğin, bir REST hizmetine isteğiniz başka bir nesneye başvurusu olan bir nesneyi döndürürse, bu başvurular, başvurulan nesneyi tam olarak eklemenin aksine XML belgesinde bir bağlantı olarak temsil edilir. Başvurulan nesne hakkında bilgi istiyorsanız, bağlantıyı takip etmeniz yeterlidir. dret.net/lectures/ppos-spring11/reading/…
Raymond Saltrelli

1
REST ile ilgili olarak hiper ortamın bir başka iyi açıklaması. timelessrepo.com/haters-gonna-hateoas
Raymond Saltrelli

Yanıtlar:


2

Web API odata yapar. Bkz Scott Guthrie blog yazısı . özellikle:

Sorgu kompozisyonu: Web API, OData URL kuralları aracılığıyla sorgulamayı kolayca desteklemenizi sağlar. Web API'nizden bir tür IQueryable döndürdüğünüzde, çerçeve otomatik olarak OData sorgu desteği sağlayarak disk belleği ve sıralamayı uygulamayı kolaylaştırır.

Ayrıca, çoğu durumda aynı sınıfın geleneksel WCF sınıfı ve Web API sınıfı olabileceğini düşünürüm, kesinlikle birbirlerini dışlamazlar.


2

Web API, http protokolünden daha doğal olarak yararlanır. Odata, birçok büyük oyuncu tarafından benimsenen Açık bir standarttır. Sadece Odata ile oynamaktan ve son zamanlarda Web API'sını keşfetmek ve biraz araştırma yapmaktan aldığım deneyimlerimden konuşabilirim.

OData harika çünkü gerçek bir standart. Kolayca bir veritabanı oluşturabilir ve HTTP üzerinden açığa çıkarabilirsiniz. Bu, herhangi bir yapılandırma yapmadan tablo yapınızı geçebileceğiniz anlamına gelir (bunu gevşek olarak söylüyorum). URL aracılığıyla, bazı hafif LINQ'ları içeren sorgular da çalıştırabilirsiniz:

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

Bu muhtemelen iyi ya da kötü. Kimlik doğrulama standarttır ve oluşturulmuştur.

Web API, benim açımdan daha ilginç. HTTP işlevselliğini (hata mesajları ve diğerleri) kullandı ve gerçek RESTful istekleri için biraz daha "yerli". Gerçekten onunla çok fazla oynamadım .. Ama etrafında okudum ve MVC ve Web API bir gün, yine, belki de iyi belki kötü bir gün "evli" olabilir "duydum" var ...

OData ile oynarken, bir Stored Proc oluşturdum, varlık yüzeyine eşledim, güçlü bir dönüş türü yapılandırdım ve daha sonra bir URL isteğine ve BANG'a bağladım, yazılan sonuç depolanmış proc'umla eşleştirilen RESTful isteğim var. Oldukça basitti ve tam olarak ihtiyacım olanı elde edebildim.

Sonuç olarak , WCF API ile çok ayrıntılı bir şekilde oynama şansım olmadı, ancak REST'e daha saf bir yaklaşım olduğu için müşteri gelişimi için yol olduğunu söyleyebilirim. Az ya da çok "düz" ileri geri arama yapacak ve "Modelleri Görüntüle" yi alacaksanız, daha doğal bir etkileşim sağlayacaktır.

Diğer yandan. İstemci etkileşimine dayalı veriler üzerinde karmaşık (ish) sorgular yapacaksanız ve sorgu mantığını "oluşturmak" ve bir parametre olarak iletmek istiyorsanız, Odata çalışabilir.

Ben bakmak bir yapısal biçimde (tablo / ilişki yapısı anlamına gelir) verilerimi açığa ve daha sonra doğrudan bir istemci formu sorgulamak gerekiyorsa, o zaman Odata en iyi çalışır. "Diğerlerinin" verilere (doğru yetkilendirme vb. İle) erişmesine izin vermek de iyidir, bu yüzden OData protokolüne bağlı kalır

URL'yi (/ products / orders / 22) dikte ettiğiniz ve "gizli" yönetilen kodunuzdan ve veri yapınızdan karmaşık "sonuç kümeleri" oluşturduğunuz RESTful istekleri istiyorsanız VE ayrıca HTTP yanıt iletilerinden de yararlanabilirsiniz. Web API muhtemelen en iyi seçenek olacaktır.

yine, hepsi araştırma ve oyundan. Bir üretim / tam gelişmiş uygulama senaryosunda da uygulama yapmadım. Bence onların hem güçlü hem de zayıf yönleri olacak ve kesinlikle bir miktar örtüşme var


2

Hipermedya açısından kesinlikle Web API. AtomPub'a dayanan OData, HTTP kullanarak bir veritabanını ortaya çıkarmanın bir yoludur, yalnızca sınırlı bir dizi önceden tanımlanmış durum aktarımı (CRUD) alırsınız. Öte yandan, bir hipermedya servisi, müşteri için uyarlanmış bir uygulama gibidir. Web API ile istediğiniz tüm bağlantıları gömebilirsiniz, ayrıca OData sorgu sözdizimini de kullanabilirsiniz. Aslında, HTML'yi temel biçim olarak kullanmak istiyorsanız, Microsoft yığınındaki en iyi hiper ortam çözümü ASP.NET MVC'dir.


2
Web API kullanarak bunu uygulamak için çevrimiçi örnekleri var mı?
Raymond Saltrelli


hala bu görüşü odata v3'teki eylemlerle ( odata.org/media/30002/OData.html#actions ) ekleyerek destekliyor musunuz?
Chris DaMour
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.