Как получить список участников из Silverstripe API - PullRequest
1 голос
/ 27 февраля 2020

Я занимаюсь разработкой платформы, и мне нужно получать электронные письма участников от существующей установки Silverstripe. Я думаю, что это V4, но пока не уверен.

Я надеялся вызвать REST API, но я не могу найти какую-либо информацию о том, как вы go сделали бы это. Я должен был бы звонить этому каждый день, чтобы получить последних участников.

Возможно ли это или есть другой способ go сделать это?

Я просмотрел документацию по API, но информация не полезна, и она не имеет объяснений или примеров. https://api.silverstripe.org/4/index.html

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Вы можете сделать это практически из коробки с помощью SilverStripe GraphQL API в SilverStripe 4. В дополнение к ответу 3dgoo , вот вам руководство:

Из конфигурация коробки

SilverStripe предоставляет сервер GraphQL «admin», который требует, чтобы вы вошли в систему, чтобы использовать его. Если вы хотите использовать его с другого сервера, вы можете кодировать base64 свои учетные данные аутентификации basi c и передавать его в качестве заголовка. Подробнее об этом здесь .

Модуль CMS SilverStripe уже предоставляет имя и фамилию участника , поскольку они используются частями CMS через API GraphQL. уже. Если вам нужен адрес электронной почты, вы можете добавить его с помощью некоторого basi c YAML в вашей папке app.

Добавление поля электронной почты участника

Добавить несколько пользовательских настроек в app/_config folder - конфигурация в SilverStripe объединена, поэтому значения массива fields: [Email] будут объединены со значениями CMS, указанными выше

# File: app/_config/graphql.yml
---
Name: appgraphql
---
SilverStripe\GraphQL\Manager:
  schemas:
    admin:
      scaffolding:
        types:
          SilverStripe\Security\Member:
            fields: [Email]
            operations:
              read: true

Обратите внимание, что я также добавил operations.read: true к этому, потому что CMS будет Позволяет вам читать участников по одному за раз с помощью операции readOne. Для вашего случая вы захотите включить read, который возвращает нумерованный список. Дополнительная информация о доступных операциях .

Проверка вашего запроса

Самый простой способ сделать это - установить GraphiQL (через silverstripe-graphql-devtools) веб-интерфейс (или приложение) для проверки схем GraphQL и выполнения запросов к вашему серверу. Это можно легко сделать с помощью Composer:

composer require --dev silverstripe/graphql-devtools dev-master

Откройте браузер до http://localhost/dev/graphiql?flush. Замените localhost тем, на чем работает ваш сервер SilverStripe. Вы добавляете ?flush в строку запроса, чтобы SilverStripe сообщал гриппу sh свой кэш (файлы YAML и PHP), чтобы выбрать новый модуль и конфигурацию.

Когда вы получите редактор запросов GraphiQL, вы можете начните с написания query GetUsers { ... }, и вы заметите, что при более глубоком вводе запроса он автоматически заполняет доступные вам опции.

Вот запрос для получения адресов электронной почты вашего члена:

query GetUserEmails {
  readSilverStripeMembers {
    edges {
      node {
        Email
      }
    }
  }
}

Микро-объяснение: GetUserEmails - произвольное имя запроса, которое вы создаете. Вам на самом деле не нужно писать один, без него все будет работать нормально. readSilverStripeMembers - это автоматически запрашиваемое имя запроса, которое происходит потому, что вы включили read: true в операциях GraphQL. Если вы удалите его и начнете вводить его снова, вы увидите и другие доступные опции, один из которых поставляется с CMS «из коробки» - readOneSilverStripeMember. Уровни edges и node предназначены для разбивки на страницы.

Использование запроса

Мне кажется, что ваш сервер SilverStripe где-то уже работает, и у вас может не быть локальной версии для тестовое задание. Если это так, просто добавив указанную выше конфигурацию YAML в вашу папку app и развернув ее, будет достаточно, чтобы ваш сервер отправлял электронные письма членам в вызовах администратора GraphQL, тогда вы можете выполнять запросы GraphQL с помощью cURL или чего-то такого:

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"
          }
        }
      ]
    }
  }
}
2 голосов
/ 04 марта 2020

Silverstripe 4 не предоставляет свои данные через службу REST API из коробки. Мы можем установить модуль, чтобы позволить нам сделать это.

Модуль API отдыха: https://github.com/colymba/silverstripe-restfulapi

Модуль API отдыха: https://github.com/silverstripe/silverstripe-restfulserver

Альтернативой является использование модуля Graphstripe GraphQL для извлечения данных: https://github.com/silverstripe/silverstripe-graphql

...