silverstripe / silverstripe-gatsby
SilverStripe Gatsby 基础
Requires
- silverstripe/cms: ^4.4
- silverstripe/silverstripe-headless: dev-main
This package is auto-updated.
Last update: 2024-09-06 16:01:11 UTC
README
本模块提供了一种 GraphQL API,专门用于为 Gatsby 静态构建提供数据。这使您的 SilverStripe CMS 安装能够成为 Gatsby 静态网站生成的无头数据提供者。
安装
$ composer require silverstripe/silverstripe-gatsby
要求
您的 Gatsby 项目必须安装 gatsby-source-silverstripe 插件。
$ npm install --save gatsby-source-silverstripe
还建议您使用已安装的 silverstripe-gatsby-helpers 库。
$ npm install --save silverstripe-gatsby-helpers
如何使用 API
API 有自己的端点,与 SilverStripe 管理端 GraphQL 服务器或您在前端可能使用的任何 GraphQL 都分开。
http://mysite.com/__gatsby/graphql
查询数据
查询本身有些复杂,但总的来说,访问此 API 的客户端应该是 Gatsby 本身,因此它没有巨大的义务要便于开发者使用。
query Sync($Limit:Int!, $Token:String, $Since:String) {
sync {
results(limit: $Limit, offsetToken: $Token, since: $Since) {
offsetToken # Use this on subsequent requests to chunk results
nodes {
id
parentUUID
uuid
created
lastEdited
className
ancestry
contentFields # All custom fields are flattened into a JSON string
link # DataObjects are encouraged to provide Link() methods if they appear as pages
relations {
type # HAS_ONE, HAS_MANY, etc
name
ownerType
records {
className
id
uuid
}
}
}
}
}
}`
参数
- limit:限制每个查询返回的记录数。在大型网站上,这一点至关重要。默认值:
1000
。 - offsetToken:如果您的上一个请求提供了
offsetToken
,请将其传递回这里以从上一个结果集的下一个位置开始。 - since:对 Gatsby 的增量/预览构建至关重要。提供一个时间戳作为参考,以获取自那时以来已更改的记录。
控制公开的数据对象
显然,您不想公开应用中每个单独的数据对象。例如 LoginAttempt
和 ChangeSet
这样的内部对象对 Gatsby 构建(内容为焦点)几乎没有任何用处。
您可以使用通配符来白名单和黑名单类。
SilverStripe\Gatsby\GraphQL\Types\SyncResultTypeCreator: included_dataobjects: myapp: 'MyCompany\MyApp\*' excluded_dataobjects: security: 'SilverStripe\Security\*' versioned: 'SilverStripe\Versioned\*' shortcodes: 'SilverStripe\Assets\Shortcodes\*' siteTreeLink: 'SilverStripe\CMS\Model\SiteTreeLink'
如果提供了白名单和黑名单,则黑名单具有最终决定权。
如果没有提供白名单,则默认情况下所有数据对象都包含在查询中,直到被黑名单。
如果没有提供白名单和黑名单,请不要这样做。
单一类型
由于 SilverStripe 中的复杂继承模式,使用联合和接口创建正确类型的 API 需要大量工作,并可能最终使开发者体验更差。目前,所有类型都是 DataObject
,而 Gatsby 源插件能够通过命名空间每个反序列化字段的类特定子字段来伪类型化 customFields
blob。
query {
allDataObjects {
# core fields here
id
link
lastEdited
SilverStripeSiteTree {
# fields specific to this class are grouped appropriately
title
menuTitle
content
}
SilverStripeBlog {
featuredImage {
link
}
Children {
link
# relationships still have to nest their fields
SilverStripeBlogPost {
categories {
title
}
}
}
}
}
}
基于令牌的认证(用于草稿内容)
即将推出。