Layanan Data WCF (OData) Vs ASP.NET Web API? Hypermedia?


12

Saya mendesain aplikasi terdistribusi yang terdiri dari layanan REST dan beragam klien (Silverlight, iOS, Windows Phone 7, dll). Saya siap memutuskan bahwa saya akan mengimplementasikan layanan REST saya menggunakan Layanan Data WCF (OData) tetapi sekarang MVC 4 Web API telah membuat saya mempertanyakan keputusan itu.

Yang saya sukai tentang OData adalah kemampuan URI query dan hypermedia yang Anda dapatkan secara gratis. Apa yang saya sukai adalah verbositas muatan OData; banyak karakter yang tidak perlu muncul.

Apa yang saya sukai dari Web API adalah payloadnya jauh lebih ringkas dan memiliki kemampuan query URI dari OData, namun tampaknya kekurangan hypermedia (setidaknya, di luar kotak). Bos saya juga mendorong Web API karena "kekuatan yang ada di Microsoft mendukungnya dan OData belum mendapatkan daya tarik."

Jadi saya punya dua pertanyaan:

1) Adakah yang bisa berkomentar tentang dukungan / traksi API Web dan OData?

2) Apakah API Web diharapkan untuk secara asli mendukung hypermedia dengan waktu rilis atau apakah ada implementasi atau contoh yang tidak perlu saya perhatikan?

Terima kasih!


2
Jawaban yang bagus untuk pertanyaan 1 sejauh ini. Adakah yang punya wawasan tentang pertanyaan kedua saya?
Raymond Saltrelli

Agak merindukan itu, dan saya telah melihat istilah tetapi saya tidak yakin apa hypermedia dalam arti teknis - apakah Anda memiliki tautan?
Wyatt Barnett

2
Pada dasarnya, hypermedia dalam konteks REST berarti "beban malas". Misalnya, jika permintaan Anda ke layanan REST mengembalikan objek yang memiliki referensi ke objek lain, referensi tersebut direpresentasikan sebagai tautan dalam dokumen XML sebagai lawan untuk memasukkan objek yang direferensikan secara keseluruhan. Jika Anda ingin info tentang objek yang dirujuk, cukup ikuti tautan. dret.net/lectures/ppos-spring11/reading/…
Raymond Saltrelli

1
Deskripsi hypermedia lain yang bagus sehubungan dengan REST. timelessrepo.com/haters-gonna-hateoas
Raymond Saltrelli

Jawaban:


2

API Web melakukan odata. Lihat posting blog Scott Guthrie . Secara khusus:

Komposisi kueri: API Web memungkinkan Anda untuk dengan mudah mendukung permintaan melalui konvensi URL OData. Ketika Anda mengembalikan jenis IQueryable dari API Web Anda, kerangka kerja akan secara otomatis memberikan dukungan permintaan OData atasnya - membuatnya mudah untuk menerapkan paging dan penyortiran.

Saya juga berpikir bahwa dalam banyak kasus kelas yang sama bisa menjadi kelas WCF tradisional dan kelas Web API, mereka pasti tidak saling eksklusif.


2

Web API mengambil keuntungan dari protokol http secara lebih asli. Odata adalah standar terbuka yang dianut oleh banyak pemain besar. Saya hanya dapat berbicara dari pengalaman saya tentang bermain-main dengan Odata, dan baru-baru ini menemukan Web API dan melakukan penelitian.

OData keren karena ini adalah standar aktual. Anda dapat dengan mudah membuat database dan mengeksposnya melalui HTTP. Ini berarti Anda dapat melintasi struktur tabel Anda tanpa konfigurasi apa pun (saya katakan itu dengan longgar). Anda juga dapat menjalankan kueri melalui URL yang dapat menyertakan LINQ ringan:

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

Ini bisa dibilang baik atau buruk. Otentikasi adalah standar dan dibangun.

API Web, lebih menarik dari sudut pandang saya. Ini memanfaatkan fungsionalitas HTTP (pesan kesalahan, dkk.) Dan sedikit lebih "asli" untuk permintaan RESTful yang sebenarnya. Saya benar-benar belum terlalu banyak bermain dengannya .. Tapi saya sudah membaca dan sudah "mendengar" bahwa MVC dan Web API mungkin "menikah" suatu hari nanti, sekali lagi, mungkin baik mungkin buruk ...

Ketika saya bermain dengan OData, saya membuat Stored Proc, memetakannya ke permukaan entitas, mengonfigurasi tipe pengembalian yang kuat dan kemudian mengaitkannya ke permintaan URL dan BANG, ada permintaan RESTful saya yang dipetakan ke proc yang tersimpan hasil ketik saya. Itu cukup mudah, dan saya bisa mendapatkan apa yang saya butuhkan.

Kesimpulannya saya belum memiliki kesempatan untuk bermain dengan WCF API terlalu banyak detail, tetapi saya akan mengatakan itu adalah cara untuk pengembangan klien karena ini lebih merupakan pendekatan murni untuk REST. Jika Anda akan membuat lebih banyak atau lebih "langsung" panggilan bolak-balik dan mengambil "Lihat Model", itu akan memberikan interaksi yang lebih asli.

Di samping itu. Jika Anda akan membuat kueri (ish) kompleks pada data berdasarkan interaksi klien dan Anda ingin "membangun" logika kueri dan meneruskannya sebagai parameter, maka Odata bisa bekerja.

Cara saya melihatnya adalah jika saya perlu mengekspos data saya dalam format struktural (tabel makna / struktur hubungan) dan kemudian meminta secara langsung membentuk klien, maka Odata akan bekerja dengan baik. Ini juga baik untuk memungkinkan "Lainnya" mengakses data (dengan auth yang tepat dll.) Itulah sebabnya ia mematuhi protokol OData

Jika Anda ingin permintaan RESTful di mana Anda mendikte URL (/ produk / pesanan / 22, dan membuat "set hasil" yang kompleks dari kode terkelola "tersembunyi" dan struktur data DAN Anda mungkin juga mendapat manfaat dari pesan respons HTTP, maka API Web mungkin akan menjadi taruhan terbaik ..

sekali lagi, ini semua dari penelitian dan bermain-main. Saya belum menerapkan baik dalam skenario aplikasi produksi / ditiup penuh. Saya pikir mereka berdua akan memiliki kekuatan dan kelemahan mereka, dan pasti ada beberapa tumpang tindih


2

Dari sudut pandang hypermedia, pasti Web API. OData, yang didasarkan pada AtomPub, hanyalah cara untuk mengekspos database menggunakan HTTP, Anda hanya mendapatkan seperangkat terbatas transfer status yang telah ditentukan sebelumnya (CRUD). Di sisi lain, layanan hypermedia seperti aplikasi, yang dirancang untuk klien. Dengan Web API, Anda dapat menyematkan semua tautan yang Anda inginkan, plus Anda juga dapat menggunakan sintaks permintaan OData. Sebenarnya, solusi hypermedia terbaik di tumpukan Microsoft adalah ASP.NET MVC, jika Anda bersedia menggunakan HTML sebagai format dasar.


2
Apakah ada contoh daring tentang cara menerapkan ini menggunakan Web API?
Raymond Saltrelli


Anda masih mendukung pendapat ini dengan menambahkan tindakan di odata v3 ( odata.org/media/30002/OData.html#actions )?
Chris DaMour
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.