MissingRefError - перечисление удаленного веб-сервиса REST схемы json с использованием $ref не разрешает ссылку на удаленный json

Я использую Angular6-json-schema-form< /strong> для создания Angular Forms из схем JSON.

Я пытаюсь заполнить перечисление схемы из удаленного веб-сервиса REST, используя ссылки $ref, но получаю сообщение об ошибке MissingRefError.

Вот моя схема:

{
"$id": "http://www.mocky.io/v2/5c7ff2e833000000338484c2.json#",
"title": "A rather large form",
"type": "object",
"properties": {
  "noenum": { "$ref": "#/definitions/largeEnum" }
}
}

JSON внутри ссылки имеет следующее:

{ 
"definitions": {
"largeEnum": {
  "type": "string",
  "enum": [
    "option #0",
    "option #1",
    "option #2",
    "option #3",
    "option #4"
  ]
}
}
}

Если я делаю это локально, как это, это работает:

{
"definitions": {
  "largeEnum": {
    "type": "string",
    "enum": [
        "option #0",
        "option #1",
        "option #2",
        "option #3",
        "option #4"
    ]
  },
  "title": "A rather large form",
  "type": "object",
  "properties": {
    "noenum": {"$ref": "#/definitions/largeEnum" }
   }
}

Пожалуйста, посмотрите на скриншот ошибки

Ошибка из консоли

Мне нужно заставить его работать удаленно из размещенного файла json или конечной точки REST.


person InternCoder    schedule 06.03.2019    source источник
comment
В JSON внутри ссылки есть следующее: - Какая ссылка? Можете ли вы объяснить, что вы подразумеваете под этим, пожалуйста?   -  person Relequestual    schedule 06.03.2019
comment
Если я делаю это локально, как это, это работает: - Если вы делаете ЧТО локально? Можете ли вы предоставить некоторый код, чтобы продемонстрировать, что вы делаете локально, пожалуйста?   -  person Relequestual    schedule 06.03.2019
comment
@Relequestual Я имею в виду локальные ссылки '$ ref' на /definitions/largeEnum (определения предоставляются в той же схеме.) Теперь json внутри внешней ссылки (mocky.io) в свойстве '$ id'. Почему вы не видите код (схемы json и снимок экрана с ошибкой), который я только что предоставил   -  person InternCoder    schedule 06.03.2019
comment
Я прекрасно вижу ошибку. Я хочу увидеть код, который вы написали и работаете, так как это покажет мне, что вы на самом деле сделали, а не то, что, как я думаю, вы могли сделать.   -  person Relequestual    schedule 07.03.2019
comment
Похоже, Эрвин может быть прав. Как вы думаете, чем занимается $id? $id используется для идентификации текущей схемы согласно ответу Эрвина.   -  person Relequestual    schedule 07.03.2019
comment
Если я увижу ваш код, он может показать, какую реализацию вы используете, что может означать, что я могу затем определить поведение реализации по внешним ссылкам и сказать вам, будет ли то, что предложенный ниже ответ, будет работать для вас или нет. Реализациям не нужно предполагать, что предоставленная вами ссылка является URL-адресом с сетевой адресацией (например, она может не работать, если вы поместите ее в свой браузер).   -  person Relequestual    schedule 07.03.2019
comment
Похоже, ожидаемая вами функциональность в настоящее время не реализована для используемой вами библиотеки: github.com/hamzahamidi/Angular6-json-schema-form/issues/92   -  person Relequestual    schedule 07.03.2019
comment
Ну вот, теперь вы поняли, что код, который вы искали, находится внутри библиотеки! Спасибо за помощь. Можете ли вы предложить какие-либо библиотеки для создания форм из схемы, которые поддерживают эту функциональность (внешнее разрешение $ref ). Спасибо   -  person InternCoder    schedule 07.03.2019
comment
Ну нет. Было бы полезно показать, что я передаю схему в код функции формы, чтобы другие могли воспроизвести вашу проблему. См. stackoverflow.com/help/mcve.   -  person Relequestual    schedule 07.03.2019
comment
У нас есть список библиотек для создания веб-интерфейсов, использующих схему JSON, хотя я не могу рекомендовать какую-то конкретную: json-schema.org/implementations.html#web-ui-generation   -  person Relequestual    schedule 07.03.2019


Ответы (1)


Судя по вашему комментарию, вы думаете, что $id разрешает удаленную ссылку. Хотя это неверно; $id определяет способ обращения к текущей схеме.

Вместо этого вам нужно использовать ключевое слово "$ref" для ссылки на удаленную схему.

(Выбирает ли ваш валидатор активно удаленный URL-адрес или требует, чтобы вы сами включили содержимое этой схемы, зависит от реализации валидатора.)

Вы можете сделать:

{
    "title": "A rather large form",
    "type": "object",
    "properties": {
        "noenum": {
            "$ref": "http://www.mocky.io/v2/5c7ff2e833000000338484c2.json#/definitions/largeEnum"
        }
    }
}
person Erwin Bolwidt    schedule 07.03.2019
comment
Спасибо за ваш ответ. $ref на внешние ссылки не поддерживается библиотекой, которую я использую (будет ли ваш валидатор активно извлекать удаленный URL-адрес или требует, чтобы вы сами включали содержимое этой схемы, зависит от реализации валидатора). - person InternCoder; 07.03.2019
comment
Можете ли вы предложить альтернативные библиотеки или метод реализации $ref для функциональности внешних схем? - person InternCoder; 07.03.2019