taicait / ss-gatsby-fixed
SilverStripe Gatsby 固定版
Requires
- silverstripe/cms: ^4.4
This package is not auto-updated.
Last update: 2024-09-21 21:57:18 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
块。
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
}
}
}
}
}
}
基于令牌的认证(用于草稿内容)
即将推出。