colymba / silverstripe-restfulapi
默认JSON序列化器的SilverStripe RESTful API。
Requires
- silverstripe/framework: ~4.1
Requires (Dev)
- phpunit/phpunit: ~5.7@stable
This package is auto-updated.
Last update: 2024-09-12 17:18:40 UTC
README
⚠️ 我没有能像这些仓库应得的那样给予足够的关注。如果您有时间并且有兴趣帮助维护它们,请给我留言。 🚨
SilverStripe RESTful API
此模块实现了对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配置执行访问控制。
配置
请参阅各个组件配置文件以了解模式详情
- RESTfulAPI是API的根目录
- TokenAuthenticator通过令牌处理查询身份验证
- DefaultPermissionManager处理数据对象级别的权限检查
- DefaultQueryHandler大部分逻辑发生的地方
- DefaultSerializer和反序列化程序是日常使用的默认序列化程序
- EmberDataSerializer和反序列化程序专门设计用于与Ember Data和application/vnd.api+json一起使用
以下是一个网站的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或令牌每分钟的请求数量)
- 检查组件接口实现
许可协议
版权所有(c)2018,Thierry Francois(colymba),保留所有权利。