2013-09-08 9 views
12

ist es möglich, Metadaten eines OData-Dienstes im JSON-Format zu erhalten?

Wenn ich versuche, format=json zu verwenden, funktioniert es nicht. Hier ist, was ich versuchte:

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

Antwort

15

Das $metadata Dokument im CSDL Format ist, das derzeit nur eine XML-Darstellung hat. (Als Seite beachten, wenn Sie das JSON-Format für eine andere Art von OData Nutzlast beantragen wollen, stellen Sie sicher, dass die format Abfrage Token ein $ vor ihm hat. $format=json)

Also, nein ist es nicht möglich. Sie können jedoch erhalten das Service-Dokument in JSON, die eine Teilmenge der $ Metadatendokument ist:

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

Dies wird nicht Typ-Informationen haben, aber es wird die verfügbaren Einstiegspunkte der Dienstliste (dh , die Entität setzt).

0

Ich stimmte der vorherigen Antwort zu. Dies wird von der Spezifikation nicht unterstützt, aber einige OData-Frameworks/Bibliotheken sind dabei, diese Funktion zu implementieren.

Ich denke an Olingo. Dies kann für Sie hilfreich sein, wenn Sie auch die Serverseite implementieren. Sehen Sie dieses Problem in der Olingo JIRA für weitere Informationen:

Hoffe, es hilft Ihnen, Thierry

0

Als Alternative zu ?$format=json, könnten Sie auch Setze einfach die folgenden zwei Header:

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

Ich bin nicht sicher, welche die minimale OData-Version erforderlich ist, aber das funktioniert für mich perfekt auf Microsoft Dynamics NAV 2016, die OData v4 verwendet.

1

Sie können jQuery verwenden, um die relevanten Informationen aus einem OData-Service $ metadata abzurufen.

Beispiel:
Sie schreiben einen Komponententest, um zu überprüfen, ob die Eigenschaften der OData-Entitäten mit Ihren Anwendungsentitäten übereinstimmen. Dann müssen Sie die Eigenschaften der OData-Entität abrufen.

$.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); 
      } 
}); 
Verwandte Themen