colymba/silverstripe-restfulapi

默认JSON序列化器的SilverStripe RESTful API。

安装数: 28,456

依赖者: 1

建议者: 0

安全: 0

星标: 64

关注者: 10

分支: 33

开放问题: 36

类型:silverstripe-vendormodule

v3.0.2 2019-02-21 19:54 UTC

This package is auto-updated.

Last update: 2024-09-12 17:18:40 UTC


README

⚠️ 我没有能像这些仓库应得的那样给予足够的关注。如果您有时间并且有兴趣帮助维护它们,请给我留言。 🚨

SilverStripe RESTful API

Build Status

此模块实现了对SilverStripe模型进行读写访问的RESTful API。它包含默认的Token验证器、查询处理器和JSON序列化器,并且可以通过自定义组件扩展以满足您的需求,并返回XML或其他内容类型。

API URL结构

Model 是您正在查询的模型的类名(名称格式可能因DeSerializer而异)。例如,对于名为 Book 的模型类,URL将如下所示

  • api/Book/33
  • api/Book?title=Henry
  • api/Book?title__StartsWith=Henry
  • api/Book?title__StartsWith=Henry&__rand=123456&__limit=1
  • api/Book?title__StartsWith=Henry&__rand=123456&__limit[]=10&__limit[]=5

必须在使用 Authenticator 类的 $allowed_actions 配置中定义允许的 /auth/$Action

要求

快速功能亮点

这是什么呢?

RESTfulAPI

这是主要的API控制器,它接收所有请求,检查是否需要身份验证,并在需要时将控制权传递给验证器,然后请求传递给查询处理器,查询处理器使用DeSerializer来确定模型和列名称,并从客户端解码可能的有效负载,然后将查询结果传递给序列化器进行格式化,然后将其返回给客户端。

如果启用CORS(默认为true),也会处理正确的头。

组件

RESTfulAPI 使用4种类型的组件,每种组件实现不同的接口

  • 身份验证(Authenticator
  • 权限管理(PermissionManager
  • 查询处理器(QueryHandler
  • 序列化器(Serializer

默认组件

此API为每个这些组件提供了默认值

  • TokenAuthenticator 通过HTTP头或变量中的令牌进行身份验证
  • DefaultPermissionManager 根据HTTP请求处理DataObject权限检查
  • DefaultQueryHandler 处理模型的所有查找、编辑、创建或删除操作
  • DefaultSerializer / DefaultDeSerializer 将查询结果序列化为JSON并反序列化客户端有效负载
  • EmberDataSerializer / EmberDataDeSerializer 与默认版本相同,但具有针对Ember Data的特定格式化

您可以通过实现正确的接口或扩展现有组件来创建自己的类。在创建自己的组件时,任何错误都应作为RESTfulAPIError对象返回给RESTfulAPI

Token身份验证扩展

当使用 TokenAuthenticator 时,您必须将 TokenAuthExtension DataExtension 添加到 DataObject,并使用正确的配置设置 TokenAuthenticator

默认情况下,API身份验证已禁用。

权限管理

数据对象API访问控制可以通过两种方式管理。通过api_access YML配置进行简单配置,或者通过PermissionManager组件通过数据对象权限进行管理。

还有一个示例Group扩展GroupExtension,它提供了一组基本的专用API权限。这可以通过配置启用,或者您也可以创建自己的。

默认情况下,API仅对api_access YML配置执行访问控制。

配置

请参阅各个组件配置文件以了解模式详情

以下是一个网站的config.yml文件示例

---
Name: mysite
After:
    - 'framework/*'
    - 'cms/*'
---
# API access
Artwork:
  api_access: true
Author:
  api_access: true
Category:
  api_access: true
Magazine:
  api_access: true
Tag:
  api_access: 'GET,POST'
Visual:
  api_access: true
Image:
  api_access: true
File:
  api_access: true
Page:
  api_access: false
# RestfulAPI config
Colymba\RESTfulAPI\RESTfulAPI:
  authentication_policy: true
  access_control_policy: 'ACL_CHECK_CONFIG_AND_MODEL'
  dependencies:
    authenticator: '%$Colymba\RESTfulAPI\Authenticators\TokenAuthenticator'
    authority: '%$Colymba\RESTfulAPI\PermissionManagers\DefaultPermissionManager'
    queryHandler: '%$Colymba\RESTfulAPI\QueryHandlers\DefaultQueryHandler'
    serializer: '%$Colymba\RESTfulAPI\Serializers\EmberData\EmberDataSerializer'
  cors:
    Enabled: true
    Allow-Origin: 'http://mydomain.com'
    Allow-Headers: '*'
    Allow-Methods: 'OPTIONS, GET'
    Max-Age: 86400
# Components config
Colymba\RESTfulAPI\QueryHandlers\DefaultQueryHandler\DefaultQueryHandler:
  dependencies:
    deSerializer: '%$Colymba\RESTfulAPI\Serializers\EmberData\EmberDataDeSerializer'
Colymba\RESTfulAPI\Serializers\EmberData\EmberDataSerializer:
  sideloaded_records:
    Artwork:
      - 'Visuals'
      - 'Authors'

待办事项

  • API访问IP限制(限制每个IP或令牌每分钟的请求数量)
  • 检查组件接口实现

许可协议

BSD 3条款许可协议

版权所有(c)2018,Thierry Francois(colymba),保留所有权利。