Как использовать службу OData с помощью Html/Javascript?

В настоящее время наш проект использует Silverlight для использования службы Odata. Это сделало жизнь довольно простой, поскольку мы можем просто ссылаться на службу OData, что дает нам созданную ссылку на службу/сущности.

Однако есть некоторые дискуссии о том, следует ли нам переходить на Html (html5). Я хотел бы знать, чего ожидать, если мы внесем это изменение. Конечно, мы будем использовать фреймворк вроде jQuery.

  • Меня больше всего беспокоит, как использовать ту же службу OData через JavaScript/jQuery.
  • Как мы предполагаем десериализовать/сериализовать сущности, возвращаемые этой службой OData?
  • Предполагается ли, что наш контракт данных жестко закодирован (если это так, то это действительно неприемлемо для нас)?

Спасибо!


person AlvinfromDiaspar    schedule 11.04.2012    source источник


Ответы (5)


Источники OData могут возвращать данные в формате JSON, поэтому ваши веб-страницы могут передавать ваши данные в формате XHR и получать их в формате JSON, который получает десериализуется обратно в объект Javascript, который вы можете разобрать и выполнить действие или отобразить.

Вот несколько дополнительных ссылок для начала:

ХТН.

person Rich Turner    schedule 11.04.2012
comment
Чтобы добавить дополнительные ссылки к вышеперечисленным рекомендуемым библиотекам. ODataJs — datajs.codeplex.com/documentation - person JeeShen Lee; 26.07.2015

Мы также создали довольно крутую небольшую библиотеку под названием 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.

person Mark Stafford - MSFT    schedule 12.04.2012
comment
На самом деле, breezejs, упомянутый выше, использует эту библиотеку под прикрытием, чтобы обеспечить свою функциональность OData. - person Jay Traband; 08.12.2012
comment
Как и JayData и ряд других библиотек. :) Это никуда не денется. - person Mark Stafford - MSFT; 17.04.2013
comment
Довольно крутая маленькая библиотека: в минимизированном виде 81 КБ это не круто и не мало. Мы ищем только для связи с API Bing, и загрузка такой массивной библиотеки для простой операции кажется довольно расточительной. Я уверен, что он делает миллион других вещей, но это не относится к делу. - person Noel Abrahams; 30.05.2014

В качестве альтернативы вы можете попробовать 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.

person Peter Aron Zentai    schedule 02.05.2012

Если вы хотите отображать данные в таблице и использовать сортировку, разбиение на страницы, поиск, вы можете использовать плагин jQuery dataTables https://www.datatables.net/ с соединителем OData http://vpllan.github.io/jQuery.dataTables.oData/

Вам не нужно никакого дополнительного программирования, так как dataTables будет выполнять операции за вас.

person Jovan MSFT    schedule 04.03.2014

Вы можете использовать этот клиент OData на основе аксиом, которые я написал.

https://github.com/fabio-nettis/ODCJ

Соединитель OData для Javascript или более известный как ODCJ — это клиент на основе обещаний, который использует axios для установления соединений со службами OData V3/V4. ODCJ предоставляет множество полезных функций для настройки URL-адреса запроса и свойств фильтрации.

person Sudo.Root    schedule 27.09.2019