2012-04-11 41 views
18

Nuestro proyecto actualmente usa Silverlight para consumir un servicio Odata. Esto ha simplificado la vida, ya que solo podemos hacer referencia al servicio OData, lo que nos proporciona referencias/entidades de servicio generadas.¿Cómo consumir el servicio OData con Html/Javascript?

Sin embargo, existe un debate sobre si debemos pasar a Html (html5). Me gustaría saber qué esperar si hacemos este cambio. Estaríamos aprovechando un marco como jQuery, por supuesto.

  • Mi principal preocupación es cómo consumir el mismo servicio OData a través de JavaScript/jQuery.
  • ¿Cómo se supone deserializar/serializar entidades devueltas de este servicio OData?
  • ¿Se supone que nuestro contrato de datos está codificado (si es así, esto es realmente inaceptable para nosotros)?

Gracias!

Respuesta

15

OData sources can return data as JSON para que sus páginas web puedan XHR sus datos y recibirlos como JSON, que se serializa de nuevo en un objeto Javascript para que usted pueda separar y actuar sobre o mostrar.

Éstos son algunos enlaces adicionales a empezar:

HTH.

+0

Para agregar enlaces adicionales a las bibliotecas sugeridas anteriormente. ODataJs - http://datajs.codeplex.com/documentation –

10

También hemos producido una pequeña y genial biblioteca llamada Data.js (http://datajs.codeplex.com/) que acelerará significativamente el consumo de OData desde JavaScript. He aquí una muestra de 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)) 

Y el código JavaScript que genera:

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); 
    }); 
    })(); 

Hasta ahora he tenido éxito con el uso de CoffeeScript, jQuery y Knockout.js.

+2

En realidad, breezejs mencionado anteriormente, utiliza esta biblioteca bajo las cubiertas para proporcionar su funcionalidad OData. –

+0

Al igual que JayData y otras bibliotecas. :) No va a ir a ninguna parte. –

+1

Una "pequeña biblioteca muy guay": a 81 KB minificada, no es genial ni pequeña. Solo buscamos comunicarnos con la API de Bing y cargar una biblioteca tan masiva para una operación simple parece un desperdicio. Estoy seguro de que hace un millón de otras cosas, pero eso no viene al caso. –

3

Como alternativa, puede dar una oportunidad al JayData, que tiene compatibilidad con oData, basada en la biblioteca de datos de supercool. Proporciona una capa de acceso a datos abstracta sobre varios proveedores de almacenamiento o protocolos, uno de los cuales es OData.

La consulta se mencionó anteriormente se vería algo como esto

var source = new $data.yourOdataContext({serviceUri:"http://odata.netflix.com/v2/Catalog"}); 

source.Titles 
    .take(5) 
    .forEach(function(catalog) { render(catalog); }); 

Como es posible que no se puede esperar esto se traduce a .../Títulos? $ Filter = 5, por lo que las operaciones no se realizan en el cliente , incluso si la sintaxis simple pudiera sugerir

JayData le dará JavaScript Language Query (JSLQ) que le permite consultar los datos utilizando la función de filtro estándar ES5: todo con JavaScript, no se requiere conocimiento de la sintaxis de consulta de OData.

Cuestiones relacionadas