2013-09-08 8 views
12

czy można uzyskać metadane usługi OData w formacie JSON?

Kiedy próbuję użyć format=json, to nie działa. Oto, co starałem:

http://odata.informea.org/services/odata.svc/$metadata/?format=json 

Odpowiedz

15

Dokument $metadata jest w formacie CSDL, który obecnie ma tylko reprezentację XML. (Na marginesie, jeśli chcesz wystąpić o formacie JSON dla innego rodzaju OData ładowności, upewnij token format kwerenda ma $ przed nim. $format=json)

Tak więc, nie to nie jest możliwy. Można jednak uzyskać dokument serwisowa w JSON, który jest podzbiorem dokumentu $ metadanych:

http://odata.informea.org/services/odata.svc?$format=json 

ten nie będzie miał informacje o typie, ale będzie to listę dostępnych punktów wejścia na usługi (tj , encja ustawia).

0

Zgadzam się z poprzednią odpowiedzią. Nie jest to obsługiwane w specyfikacji, ale niektóre struktury/biblioteki OData wkrótce wdrożą tę funkcję.

Myślę o Olingo. Może to być pomocne, jeśli wdrożysz stronę serwera. Zobacz tę kwestię na Olingo JIRA więcej szczegółów:

Nadzieję, że to pomaga, Thierry

0

Jako alternatywę dla ?$format=json, można również po prostu ustaw następujące dwa nagłówki:

  • Accept: application/json
  • Content-Type: application/json; charset=utf-8

Nie jestem pewien, co jest minimalna wymagana wersja OData, ale to działa idealnie dla mnie na Microsoft Dynamics NAV 2016, który wykorzystuje OData v4.

1

Możesz użyć jQuery, aby uzyskać odpowiednie informacje z metadanych usługi OData $.

Weźmy na przykład:
Piszemy test jednostkowy, aby sprawdzić, czy nazwy właściwości encji OData są zgodne z twoimi jednostkami aplikacji. Następnie musisz pobrać właściwości encji OData.

$.ajax({ 
      type: "GET", 
      url: "/destinations/odata-service/$metadata", 
      beforeSend: function() { 
       console.log("before send check"); 
      }, 
      dataType: "xml", 
      contentType: "application/atom+xml", 
      context: document.body, 
      success: function(xml) { 
       console.log("Success ResourceTypes"); 
       var ODataTypeINeed = $(xml).find('EntityType').filter(function(){ 
             return $(this).attr('Name') == 'ODataTypeINeed' 
            });     
       $(ODataTypeINeed).find('Property').each(function() { 
        console.log($(this).attr('Name')); //List of OData Entity properties 
       }); 
      }, 
      error: function(err) { 
       console.log(err); 
      } 
});