Как использовать службу OData с помощью Html/Javascript?
В настоящее время наш проект использует Silverlight для использования сервиса Odata. Это сделало жизнь довольно простой, так как мы можем просто ссылаться на службу OData, предоставляя нам созданную служебную ссылку/сущности.
Однако существует некоторое обсуждение вопроса о том, следует ли переходить на Html (html5). Я хотел бы знать, чего ожидать, если мы сделаем это изменение. Конечно, мы будем использовать фреймворк вроде jQuery.
- Моя основная проблема заключается в том, как использовать один и тот же сервис OData с помощью JavaScript/jQuery.
- Как мы предположили десериализацию/сериализацию объектов, возвращаемых из этой службы OData?
- Является ли наш контракт на данные жестко закодированным (если это так, для нас это действительно неприемлемо)?
Спасибо!
Ответы
Ответ 1
Источники OData могут возвращать данные как JSON, поэтому ваши веб-страницы могут XHR ваши данные и получать их как JSON, который де-сериализуется обратно в объект Javascript для вас отбирать и действовать или отображать.
Вот несколько дополнительных ссылок, которые помогут вам начать:
НТН.
Ответ 2
Мы также выпустили довольно классную небольшую библиотеку под названием Data.js(http://datajs.codeplex.com/), которая значительно ускорит потребление OData из JavaScript. Здесь образец в CoffeeScript:
success = (data) -> $("#searchResultsTemplate").tmpl(data).appendTo("#resultsArea")
error = (err) -> $("#resultsArea").text(JSON.stringify(err.message))
do ->
$("#search").click(->
OData.defaultHttpClient.enableJsonpCallback = true
OData.read("http://odata.netflix.com/v2/Catalog/Titles?$top=5", success, error))
И генерируемый JavaScript:
success = function(data) {
return $("#searchResultsTemplate").tmpl(data).appendTo("#resultsArea");
};
error = function(err) {
return $("#resultsArea").text(JSON.stringify(err.message));
};
(function() {
return $("#search").click(function() {
OData.defaultHttpClient.enableJsonpCallback = true;
return OData.read("http://odata.netflix.com/v2/Catalog/Titles?$top=5", success, error);
});
})();
До сих пор я успешно использовал его с CoffeeScript, jQuery и Knockout.js.
Ответ 3
В качестве альтернативы вы можете сделать снимок JayData, который поддерживает oData - на основе библиотеки supercool datajs. Он обеспечивает абстрактный уровень доступа к данным через несколько поставщиков или протоколов хранения данных, одним из важных из которых является OData.
Вышеупомянутый запрос будет выглядеть примерно так.
var source = new $data.yourOdataContext({serviceUri:"http://odata.netflix.com/v2/Catalog"});
source.Titles
.take(5)
.forEach( function(catalog) { render(catalog); });
Как вы и не ожидали, что это будет переведено на... /Titles? $filter = 5, поэтому операции не выполняются на клиенте, даже если может предложить простой синтаксис.
JayData предоставит вам JavaScript Language Query (JSLQ), позволяющий запрашивать данные с помощью стандартной функции фильтрации ES5: все с JavaScript, а не знание синтаксиса запроса OData.
Ответ 4
Если вы хотите отображать данные в таблице и использовать сортировку, подкачку, поиск, вы можете использовать плагин jQuery dataTables https://www.datatables.net/ с OData разъем http://vpllan.github.io/jQuery.dataTables.oData/
Вам не нужно какое-либо дополнительное программирование, так как dataTables будут выполнять для вас операции.
Ответ 5
Вы могли бы этот клиент OData на основе аксиомы, которые я написал.
https://github.com/fabio-nettis/ODCJ
Соединитель OData для Javascript или более известный ранее как ODCJ - это клиент, основанный на обещаниях, который использует axios для установления соединений со службами OData V3/V4. ODCJ предоставляет множество полезных функций для настройки URL-адреса запроса и свойств фильтрации.