JSONLD- @context的绝对URL

时间:2018-05-07 08:36:45

标签: symfony4 json-ld api-platform.com

我正在使用Symfony 4和Api Platform,到目前为止工作正常。要在前端实现内容,我使用的是jsonld.js,它会成为处理ld+json相关操作的»官方«库,因为它直接链接到json-ld.org

但是: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不可访问(如果您使用的是客户端JavaScript,请确保服务器使用CORS),过多的重定向,非JSON响应或者提供了多个HTTP链接头远程背景。

@context值更改为:http://localhost:8000/api/v1并且一切正常,因此错误的原因是相对网址。

问题: 是否可以在服务器或jsonld.js中设置»base url«?如果是这样,那么首选解决方案应该是什么:Server-或clientide。

1 个答案:

答案 0 :(得分:0)

不幸的是,这还不可能。 ContextBuilderInterface从一开始就设计为能够生成绝对网址:https://github.com/api-platform/core/blob/2ff3dd352facc0e0e5cf1af3e1cbc50277f6364f/src/JsonLd/ContextBuilder.php#L88

可以配置生成样式的Pull Request已经打开,但从未完成:https://github.com/api-platform/core/pull/751

如果一个好人想要收回这个PR来完成它,那将非常感激!

无论如何,这是一个奇怪的错误。您应该尝试找到潜在的问题(CORS标头未正确设置,错误的主机配置......)。