silverstripe/silverstripe-gatsby

SilverStripe Gatsby 基础

安装: 337

依赖关系: 0

建议者: 0

安全: 0

星标: 17

关注者: 16

分支: 2

开放问题: 4

类型:silverstripe-vendormodule

dev-master 2021-06-02 01:56 UTC

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 的增量/预览构建至关重要。提供一个时间戳作为参考,以获取自那时以来已更改的记录。

控制公开的数据对象

显然,您不想公开应用中每个单独的数据对象。例如 LoginAttemptChangeSet 这样的内部对象对 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
					}
				}
			}
		}
	}
}

基于令牌的认证(用于草稿内容)

即将推出。