networkteam / neos-contentapi
Neos 内容 API
Requires
- ext-dom: *
- neos/neos: ^7.3 || ^8.0
- networkteam/neos-util: ^8.0
This package is auto-updated.
Last update: 2024-09-04 12:23:57 UTC
README
概念
站点处理
内容 API 将使用请求的当前域名/站点,因此在多站点安装中请确保通过正确的域名调用 API。
通过 Fusion 扩展
API 响应由 Fusion 原型声明。这允许高度灵活和定制。
简单 API
此包不提供复杂的节点查询 API。它主要关注使用 Neos 作为无头 CMS 时,基于文档节点的页面渲染。它也非常适合与 @networkteam/zebra 配对,并支持节点的完全视觉编辑。
可以通过路径(公开访问)或上下文路径(在工作空间中预览时访问)获取节点。
特性
- 支持多站点安装
- 支持维度(例如,用于多语言站点)
- 支持 Flowpack.Neos.DimensionResolver 进行灵活的维度路由
- 支持 Neos.RedirectHandler(如果已安装)并在设置中启用
checkRedirects
配置
Networkteam: Neos: ContentApi: recursiveReferencePropertyDepth: 1 documentList: ignoredNodeTypes: - 'Neos.Neos:Shortcut' # Enable to check redirects of RedirectsHandler (if package is available) if a node is not found checkRedirects: false
示例
为文档节点类型添加 API 原型
prototype(Neos.Demo:Document.Page.Api) < prototype(Networkteam.Neos.ContentApi:DefaultDocument) {
content {
main = Neos.Neos:ContentCollection {
nodePath = 'main'
}
teaser = Neos.Neos:ContentCollection {
nodePath = 'teaser'
}
}
}
prototype(Neos.Demo:Document.LandingPage.Api) < prototype(Neos.Demo:Document.Page.Api)
prototype(Neos.Demo:Document.Homepage.Api) < prototype(Neos.Demo:Document.Page.Api)
这里的想法是为完整的文档节点类型层次结构创建一个 .Api
原型。内容以及任意数据都可以添加到原型中,并将其序列化为 JSON。
扩展 API 站点属性
contentApi {
site {
# Set some additional context variables for default Fusion to work correctly
@context {
documentNode = ${site}
node = ${site}
}
navigation = Neos.Fusion:DataStructure {
mainItems = Neos.Fusion:Map {
items = ${q(site).children('[instanceof Neos.Neos:Document][_hiddenInIndex=false]')}
itemName = 'node'
itemRenderer = Neos.Fusion:DataStructure {
title = ${q(node).property('title')}
renderPath = Neos.Neos:NodeUri {
node = ${node}
format = 'html'
}
}
}
}
content {
footer = Neos.Neos:ContentCollection {
nodePath = 'footer'
}
}
}
}
这可以通过当前站点的 /content-api/site
端点获取(取决于域名)。
提供查询列表数据
contentApi {
queries {
# Declare a simple query that can be used to fetch articles
articles = Networkteam.Neos.ContentApi:Query.FlowQuery {
items = ${q(site).find('[instanceof Zebra.Site:Document.Article]')}
itemName = 'node'
itemRenderer = Networkteam.Neos.ContentApi:BaseNode
page = ${params.pagination.page || 0}
perPage = ${params.pagination.perPage || 3}
}
}
}
此查询可以通过 /content-api/query/articles
端点获取。它使用预定义的 Networkteam.Neos.ContentApi:Query.FlowQuery
基于预定义的 FlowQuery
表达式获取数据。
注意:对于更复杂的查询,您可以创建自己的查询实现,例如基于搜索实现以实现更有效的查询。
API 端点
/neos/content-api/documents
列出具有路由路径/上下文路径和遍历维度的可用文档。
可以通过 workspaceName
选择不同的工作区(需要身份验证)。
注意:如果
Flowpack.Neos.DimensionResolver
已经根据域名等解析了维度,则不会遍历维度。
/neos/content-api/document
根据 path
或 contextPath
渲染文档。
/neos/content-api/node
根据 contextPath
渲染单个节点。
/neos/content-api/site
独立于单个节点渲染站点属性。
/neos/content-api/query/{queryName}
获取预定义查询的数据。
查询参数
params
:查询参数(过滤器、排序、分页等)。它取决于 Fusion 实现,支持哪些确切参数。workspaceName
:节点上下文的工作区名称(默认为 live)dimensions
:节点上下文的维度
响应
查询实现应返回包含数据和元信息的 JSON 结果
{ "data": [{ ... }], "meta": { "total": 0 } }