如何从Silverstripe API检索成员列表

如何从Silverstripe API检索成员列表,silverstripe,Silverstripe,我正在开发一个平台,我需要从现有的Silverstripe安装中获取成员的电子邮件。我想是V4,但还不确定 我希望调用一个RESTAPI,但我似乎找不到任何关于如何执行此操作的信息。我需要每天打电话来获取最新的成员 这是可能的还是有其他方法可以做到这一点 我看了API文档,但信息没有帮助,也没有解释或示例 Silverstripe 4不会通过现成的REST API服务公开其数据。我们可以安装一个模块来实现这一点 Rest API模块: Rest API模块: 另一种方法是使用Silverst

我正在开发一个平台,我需要从现有的Silverstripe安装中获取成员的电子邮件。我想是V4,但还不确定

我希望调用一个RESTAPI,但我似乎找不到任何关于如何执行此操作的信息。我需要每天打电话来获取最新的成员

这是可能的还是有其他方法可以做到这一点


我看了API文档,但信息没有帮助,也没有解释或示例

Silverstripe 4不会通过现成的REST API服务公开其数据。我们可以安装一个模块来实现这一点

Rest API模块:

Rest API模块:

另一种方法是使用Silverstripe GraphQL模块检索数据:
Silverstripe 4不会通过现成的REST API服务公开其数据。我们可以安装一个模块来实现这一点

Rest API模块:

Rest API模块:

另一种方法是使用Silverstripe GraphQL模块检索数据:

使用SilverStripe 4中的SilverStripe GraphQL API,您几乎可以开箱即用。除此之外,这里还为您提供了一些指导:

开箱即用配置 SilverStripe公开了一个管理GraphQL服务器,需要您登录才能使用它。如果要从其他服务器使用它,可以对基本身份验证凭据进行base64编码,并将其作为标头传递

SilverStripe CMS模块,因为CMS的一部分已经通过GraphQLAPI使用了它们。如果你想要一个电子邮件地址,那么你可以在你的应用文件夹中添加一些基本的YAML

添加成员的电子邮件字段 将一些自定义配置添加到你的app/_config文件夹-SilverStripe中的配置被合并,因此数组值字段:[Email]将与上面链接的CMS值合并

文件:app/_config/graphql.yml -- 名称:appgraphql -- SilverStripe\GraphQL\Manager: 模式: 管理员: 脚手架: 类型: SilverStripe\Security\Member: 字段:[电子邮件] 操作: 读:对 注意,我还添加了operations.read:这是真的,因为CMS只允许您通过readOne操作一次读取一个成员。对于您的情况,您需要启用read,这将返回分页列表

测试您的查询 最简单的方法是安装一个基于web或应用程序的UI,用于检查GraphQL架构并对服务器运行查询。这可以通过Composer轻松完成:

composer require --dev silverstripe/graphql-devtools dev-master
打开您的浏览器以http://localhost/dev/graphiql?flush. 将localhost替换为运行SilverStripe服务器的任何服务器。将?flush添加到querystring中,告诉SilverStripe刷新其缓存YAML和PHP文件,以获取新模块和配置

当您获得GraphiQL查询编辑器时,您可以从编写query GetUsers{…}开始,您会注意到,当您在查询中更深入地键入时,它会自动为您完成可用的选项

以下是检索您的会员电子邮件地址的查询:

query GetUserEmails {
  readSilverStripeMembers {
    edges {
      node {
        Email
      }
    }
  }
}
微观解释:GetUserEmails是您创建的任意查询名称。你实际上不需要写一个,没有它也可以。readSilverStripeMembers是一个自动搭建的查询名称,之所以会这样,是因为您在GraphQL操作中启用了read:true。如果删除它并再次开始键入,您将看到其他可用选项,随CMS一起提供的选项是readOneSilverStripeMember。边和节点级别用于分页

使用查询 在我看来,您的SilverStripe服务器已经在某处运行,您可能没有本地版本要测试。如果是这种情况,只需将上面的YAML配置添加到您的应用程序文件夹中并部署它,就足以让您的服务器在管理员GraphQL调用中向成员发送电子邮件,然后您可以使用cURL或其他方法执行GraphQL查询:

curl 'http://localhost/admin/graphql/' \       # Adjust to your domain
  -H 'Authorization: Basic YWRtaW46YWRtaW4=' \ # This is admin:admin base64 encoded
  -H 'Content-Type: application/json' \        # Required for the input data structure
  --data-binary '{"query":"query { readSilverStripeMembers { edges { node { Email } } } }","variables":null}'
示例输出:

{
  "data": {
    "readSilverStripeMembers": {
      "edges": [
        {
          "node": {
            "Email": "leslie.lawless@example.com"
          }
        },
        {
          "node": {
            "Email": "mika@example.com"
          }
        },
        {
          "node": {
            "Email": "sam@example.com"
          }
        }
      ]
    }
  }
}

使用SilverStripe 4中的SilverStripe GraphQL API,您几乎可以立即完成这项工作。除此之外,这里还为您提供了一些指导:

开箱即用配置 SilverStripe公开了一个管理GraphQL服务器,需要您登录才能使用它。如果要从其他服务器使用它,可以对基本身份验证凭据进行base64编码,并将其作为标头传递

SilverStripe CMS模块,因为CMS的一部分已经通过GraphQLAPI使用了它们。如果你想要一个电子邮件地址,那么你可以在你的应用文件夹中添加一些基本的YAML

添加成员的电子邮件字段 将一些自定义配置添加到你的app/_config文件夹-SilverStripe中的配置被合并,因此数组值字段:[Email]将与上面链接的CMS值合并

文件:app/_config/graphql.yml -- 名称:appgraphql -- SilverStripe\GraphQL\Manager: 阴谋 作为: 管理员: 脚手架: 类型: SilverStripe\Security\Member: 字段:[电子邮件] 操作: 读:对 注意,我还添加了operations.read:这是真的,因为CMS只允许您通过readOne操作一次读取一个成员。对于您的情况,您需要启用read,这将返回分页列表

测试您的查询 最简单的方法是安装一个基于web或应用程序的UI,用于检查GraphQL架构并对服务器运行查询。这可以通过Composer轻松完成:

composer require --dev silverstripe/graphql-devtools dev-master
打开您的浏览器以http://localhost/dev/graphiql?flush. 将localhost替换为运行SilverStripe服务器的任何服务器。将?flush添加到querystring中,告诉SilverStripe刷新其缓存YAML和PHP文件,以获取新模块和配置

当您获得GraphiQL查询编辑器时,您可以从编写query GetUsers{…}开始,您会注意到,当您在查询中更深入地键入时,它会自动为您完成可用的选项

以下是检索您的会员电子邮件地址的查询:

query GetUserEmails {
  readSilverStripeMembers {
    edges {
      node {
        Email
      }
    }
  }
}
微观解释:GetUserEmails是您创建的任意查询名称。你实际上不需要写一个,没有它也可以。readSilverStripeMembers是一个自动搭建的查询名称,之所以会这样,是因为您在GraphQL操作中启用了read:true。如果删除它并再次开始键入,您将看到其他可用选项,随CMS一起提供的选项是readOneSilverStripeMember。边和节点级别用于分页

使用查询 在我看来,您的SilverStripe服务器已经在某处运行,您可能没有本地版本要测试。如果是这种情况,只需将上面的YAML配置添加到您的应用程序文件夹中并部署它,就足以让您的服务器在管理员GraphQL调用中向成员发送电子邮件,然后您可以使用cURL或其他方法执行GraphQL查询:

curl 'http://localhost/admin/graphql/' \       # Adjust to your domain
  -H 'Authorization: Basic YWRtaW46YWRtaW4=' \ # This is admin:admin base64 encoded
  -H 'Content-Type: application/json' \        # Required for the input data structure
  --data-binary '{"query":"query { readSilverStripeMembers { edges { node { Email } } } }","variables":null}'
示例输出:

{
  "data": {
    "readSilverStripeMembers": {
      "edges": [
        {
          "node": {
            "Email": "leslie.lawless@example.com"
          }
        },
        {
          "node": {
            "Email": "mika@example.com"
          }
        },
        {
          "node": {
            "Email": "sam@example.com"
          }
        }
      ]
    }
  }
}

谢谢你的全面回答。