JSONLD - абсолютные URL для @context - PullRequest
0 голосов
/ 07 мая 2018

Я использую Symfony 4 и Api Platform , пока отлично работает. Для реализации чего-либо на внешнем интерфейсе я использую jsonld.js , который выглядит как «официальная» библиотека для обработки ld+json связанных действий, поскольку она напрямую связана с json-ld. орг .

Однако: GET /api/v1 возвращает это:

{
  "@context": "/api/v1/contexts/Entrypoint",
  "@id":"/api/v1",
  "@type":"Entrypoint",
  "story":"/api/v1/stories",
  "author":"/api/v1/authors",
}

И пытается:

fetch('/api/v1')
  .then(r => r.json())
  .then(json => jsonld.expand(json))
  .then(expanded => console.log(expanded))

Результат:

Ошибка: разыменование URL не привело к допустимому объекту JSON-LD. Возможные причины: недоступный URL-адрес, возможно, из-за политики одного и того же источника (убедитесь, что сервер использует CORS, если вы используете клиентский JavaScript), слишком много перенаправлений, ответ не в формате JSON или более одного заголовка HTTP-ссылки. удаленный контекст.

Изменение значения @context на: http://localhost:8000/api/v1 и все работает, поэтому причиной ошибки являются относительные URL.

Вопрос: Можно ли установить «базовый URL» на сервере или с помощью jsonld.js? Если да, то какое решение должно быть предпочтительным: сервер или клиент.

1 Ответ

0 голосов
/ 15 мая 2018

К сожалению, это пока невозможно. ContextBuilderInterface был разработан с самого начала, чтобы иметь возможность генерировать абсолютные URL: https://github.com/api-platform/core/blob/2ff3dd352facc0e0e5cf1af3e1cbc50277f6364f/src/JsonLd/ContextBuilder.php#L88

Запрос извлечения для настройки настраиваемого стиля генерации открыт, но не завершен: https://github.com/api-platform/core/pull/751

Если хорошие люди захотят забрать этот пиар, чтобы закончить его, он будет очень признателен!

В любом случае, это странная ошибка. Вы должны попытаться найти основную проблему (неправильно заданы заголовки CORS, неправильная конфигурация хоста ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...