我正在使用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。
答案 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标头未正确设置,错误的主机配置......)。