Получение метаданных OData $в формате JSON

Можно ли получить метаданные службы OData в формате JSON?

Когда я пытаюсь использовать format=json, он не работает. Вот что я пробовал:

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

Ответ 1

Документ $metadata находится в формате CSDL, который в настоящее время имеет только XML-представление. (В качестве примечания, если вы хотите запросить json-формат для другой полезной нагрузки OData, убедитесь, что токен format имеет перед ним $: $format=json.)

Итак, нет, это невозможно. Однако вы можете получить служебный документ в JSON, который является подмножеством документа $metadata:

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

Это не будет иметь информацию о типе, но в нем будут перечислены доступные точки входа службы (т.е. сущности).

Ответ 2

Вы можете использовать jQuery для получения соответствующей информации из метаданных службы OData service.

Возьмем, например:
Вы пишете unit test, чтобы проверить, что имена свойств объектов OData совпадают с вашими сущностями приложения. Затем вы должны получить свойства объекта 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);
            }
 });

Ответ 3

Я согласился с предыдущим ответом. Это не поддерживается спецификацией, но некоторые фреймворки/библиотеки OData собираются реализовать эту функцию.

Я думаю об Олинго. Это может быть полезно для вас, если вы также реализуете серверную сторону. См. Эту проблему в Olingo JIRA для получения дополнительной информации:

Надеюсь, это поможет вам, Thierry

Ответ 4

В качестве альтернативы ?$format=json вы также можете просто установить следующие два заголовка:

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

Я не уверен, какая минимальная версия Odata требуется, но это отлично работает для меня в Microsoft Dynamics NAV 2016, которая использует Odata v4.