nglasl / silverstripe-apiwesome
一个SilverStripe模块,可自动为您的数据对象(包括页面)创建可定制的JSON/XML数据流,并提供可用于其他应用的模块化安全令牌。
Requires
- silverstripe/cms: ~3.2
- silverstripe/framework: ~3.2
This package is auto-updated.
Last update: 2021-01-13 06:14:13 UTC
README
当前版本是 2.2.15
一个SilverStripe模块,可自动为您的数据对象(包括页面)创建可定制的JSON/XML数据流,并提供可用于其他应用的模块化安全令牌。
要求
- SilverStripe 3.0 → 3.5
此模块不再受支持。
入门
- 将模块放置在您的根项目目录下。
- 通过项目配置定义任何自定义的JSON/XML数据对象排除/包含。
/dev/build
- 通过CMS选择
JSON/XML
。 - 配置属性可见性。
重新生成
安全令牌x:y
/apiwesome/retrieve/data-object-name/json?token=x:y
/apiwesome/retrieve/data-object-name/xml?token=x:y
概述
数据对象排除/包含
默认情况下包含所有数据对象(排除某些核心),除非禁用或已明确定义包含。
DataObjectOutputConfiguration::customise_data_objects('exclude', array( 'DataObjectName' ));
DataObjectOutputConfiguration::customise_data_objects('include', array( 'DataObjectName' ));
要完全禁用JSON/XML
DataObjectOutputConfiguration::customise_data_objects('disabled');
属性可见性自定义
JSON/XML数据流只对通过CMS设置属性可见性的数据对象可用。任何 has_one
关系都可能显示,其中属性可见性是递归确定的。
递归关系
默认启用,但如果有许多嵌套关系可见,将会极大地影响性能。
要禁用递归
Injector: APIwesomeService: properties: recursiveRelationships: false
安全令牌
JSON/XML数据流请求需要通过传递当前安全令牌,管理员可以重新生成此安全令牌(使先前安全令牌无效)。
安全令牌生成(和验证)是模块化的,即使JSON/XML完全禁用,也可以继续使用(更多见下文)
SecurityAdmin: extensions: - 'APIwesomeTokenExtension'
输出
JSON/XML数据流请求可以应用多个可选过滤器,其中 &filter
仅适用于可见属性
&limit=5
&sort=Attribute,ORDER
&filter1=value
&filter2=value
也可以通过数据对象适当的模型管理器进行预览。
美化JSON
默认启用,但如果有许多嵌套关系可见,将会略微影响性能。
要禁用美化打印
Injector: APIwesomeService: properties: prettyJSON: false
开发者功能
PHP
访问服务
$service = Singleton('APIwesomeService');
可编程调用这些方法以生成带有可选过滤器的JSON
$JSON = $service->retrieve('DataObjectName', 'JSON'); $JSON = $service->retrieve('DataObjectName', 'JSON', 5, array( 'Attribute', 'ORDER' ), array( 'Attribute1' => 'value', 'Attribute2' => 'value' ));
$objects = DataObjectName::get()->toNestedArray(); $JSON = $service->retrieveJSON($objects);
带有可选过滤器的XML
$XML = $service->retrieve('DataObjectName', 'XML'); $XML = $service->retrieve('DataObjectName', 'XML', 5, array( 'Attribute', 'ORDER' ), array( 'Attribute1' => 'value', 'Attribute2' => 'value' ));
$objects = DataObjectName::get()->toNestedArray(); $XML = $service->retrieveXML($objects);
为版本化页面生成JSON/XML(尽管CMS可能无法正确预览XML),与index()
中的相应阶段有关
return $service->retrieveStaged($this->data()->ID, 'JSON');
它们还可以用于解析来自另一个APIwesome实例的JSON/XML。因此,此模块可以用作API和多个项目之间的外部连接器。
$objects = $service->parseJSON($JSON);
$objects = $service->parseXML($XML);
安全令牌验证(和生成)是模块化的,可用于其他应用(更上面所述)
$validation = $service->validateToken($this->getRequest()->getVar('token')); switch($validation) { case APIwesomeService::VALID: // The token matches the current security token. break; case APIwesomeService::INVALID: // The token does not match a security token. break; case APIwesomeService::EXPIRED: // The token matches a previous security token. break; }
jQuery
JSON示例
;(function($) { $(function() { $.getJSON('//ss3.1/apiwesome/retrieve/data-object-name/json?token=' + token(), function(JSON) { // Iterate over each data object. if(JSON['APIwesome'] !== undefined) { $.each(JSON['APIwesome']['DataObjects'], function(index, object) { // The JSON feed security token is no longer valid! if((index === 'Expired') && (object === true)) { return false; } // Iterate over each visible attribute. $.each(object, function(type, attributes) { $.each(attributes, function(attribute, value) { }); break; }); }); } }) // The JSON feed has either not yet been configured, or no data objects were found. .fail(function() { }); }); })(jQuery);
维护者联系方式
Nathan Glasl, nathan@symbiote.com.au