silverstripe/restfulserver
Composer 安装命令:
composer require silverstripe/restfulserver
包简介
Add a RESTful API to your SilverStripe application
关键字:
README 文档
README
Installation
composer require silverstripe/restfulserver
Overview
This class gives your application a RESTful API. All you have to do is set the api_access configuration option to true
on the appropriate DataObjects. You will need to ensure that all of your data manipulation and security is defined in
your model layer (ie, the DataObject classes) and not in your Controllers. This is the recommended design for SilverStripe
applications.
Configuration
Example DataObject with simple API access, giving full access to all object properties and relations, unless explicitly controlled through model permissions.
namespace Vendor\Project; use SilverStripe\ORM\DataObject; class Article extends DataObject { private static $db = [ 'Title'=>'Text', 'Published'=>'Boolean' ]; private static $api_access = true; }
Example DataObject with advanced API access, limiting viewing and editing to Title attribute only:
namespace Vendor\Project; use SilverStripe\ORM\DataObject; class Article extends DataObject { private static $db = [ 'Title'=>'Text', 'Published'=>'Boolean' ]; private static $api_access = [ 'view' => ['Title'], 'edit' => ['Title'] ]; }
Example DataObject field mapping, allows aliasing fields so that public requests and responses display different field names:
namespace Vendor\Project; use SilverStripe\ORM\DataObject; class Article extends DataObject { private static $db = [ 'Title'=>'Text', 'Published'=>'Boolean' ]; private static $api_access = [ 'view' => ['Title', 'Content'], ]; private static $api_field_mapping = [ 'customTitle' => 'Title', ]; }
Given a dataobject with values:
ID: 12 Title: Title Value Content: Content value
which when requesting with the url /api/v1/Vendor-Project-Article/12?fields=customTitle,Content and Accept: application/json the response will look like:
{ "customTitle": "Title Value", "Content": "Content value" }
Similarly, PUT or POST requests will have fields transformed from the alias name to the DB field name.
Supported operations
-
GET /api/v1/(ClassName)/(ID)- gets a database record -
GET /api/v1/(ClassName)/(ID)/(Relation)- get all of the records linked to this database record by the given reatlion -
GET /api/v1/(ClassName)?(Field)=(Val)&(Field)=(Val)- searches for matching database records -
POST /api/v1/(ClassName)- create a new database record -
PUT /api/v1/(ClassName)/(ID)- updates a database record -
PUT /api/v1/(ClassName)/(ID)/(Relation)- updates a relation, replacing the existing record(s) (NOT IMPLEMENTED YET) -
POST /api/v1/(ClassName)/(ID)/(Relation)- updates a relation, appending to the existing record(s) (NOT IMPLEMENTED YET) -
DELETE /api/v1/(ClassName)/(ID)- deletes a database record (NOT IMPLEMENTED YET) -
DELETE /api/v1/(ClassName)/(ID)/(Relation)/(ForeignID)- remove the relationship between two database records, but don't actually delete the foreign object (NOT IMPLEMENTED YET) -
POST /api/v1/(ClassName)/(ID)/(MethodName)- executes a method on the given object (e.g, publish)
Search
You can trigger searches based on the fields specified on DataObject::searchable_fields and passed
through DataObject::getDefaultSearchContext(). Just add a key-value pair with the search-term
to the url, e.g. /api/v1/(ClassName)/?Title=mytitle.
Other url-modifiers
&limit=<numeric>: Limit the result set&relationdepth=<numeric>: Displays links to existing has-one and has-many relationships to a certain depth (Default: 1)&fields=<string>: Comma-separated list of fields on the output object (defaults to all database-columns). Handy to limit output for bandwidth and performance reasons.&sort=<myfield>&dir=<asc|desc>&add_fields=<string>: Comma-separated list of additional fields, for example dynamic getters.
Access control
Access control is implemented through the usual Member system with BasicAuth authentication only. By default, you have to bear the ADMIN permission to retrieve or send any data. You should override the following built-in methods to customize permission control on a class- and object-level:
DataObject::canView()DataObject::canEdit()DataObject::canDelete()DataObject::canCreate()
See SilverStripe\ORM\DataObject documentation for further details.
You can specify the character-encoding for any input on the HTTP Content-Type. At the moment, only UTF-8 is supported. All output is made in UTF-8 regardless of Accept headers.
silverstripe/restfulserver 适用场景与选型建议
silverstripe/restfulserver 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 585.01k 次下载、GitHub Stars 达 46, 最近一次更新时间为 2012 年 11 月 02 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「rest」 「api」 「silverstripe」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 silverstripe/restfulserver 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 silverstripe/restfulserver 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 silverstripe/restfulserver 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A PSR-7 compatible library for making CRUD API endpoints
Api bundle
Analytics chooser extensions for site settings.
CitaNZ's SilverStripe picture object and field for SilverStripe 4
bootstrap select field module implementing http://silviomoreto.github.io/bootstrap-select/
统计信息
- 总下载量: 585.01k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 49
- 点击次数: 8
- 依赖项目数: 6
- 推荐数: 1
其他信息
- 授权协议: BSD-3-Clause
- 更新时间: 2012-11-02