nglasl/silverstripe-apiwesome

此包已废弃,不再维护。未建议替代包。

一个SilverStripe模块,可自动为您的数据对象(包括页面)创建可定制的JSON/XML数据流,并提供可用于其他应用的模块化安全令牌。

安装: 517

依赖者: 0

建议者: 0

安全: 0

星标: 13

关注者: 2

分支: 1

类型:silverstripe-module

2.2.15 2018-01-15 04:14 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');

属性可见性自定义

visibility

JSON/XML数据流只对通过CMS设置属性可见性的数据对象可用。任何 has_one 关系都可能显示,其中属性可见性是递归确定的。

递归关系

默认启用,但如果有许多嵌套关系可见,将会极大地影响性能。

要禁用递归

Injector:
  APIwesomeService:
    properties:
      recursiveRelationships: false

安全令牌

JSON/XML数据流请求需要通过传递当前安全令牌,管理员可以重新生成此安全令牌(使先前安全令牌无效)。

token

安全令牌生成(和验证)是模块化的,即使JSON/XML完全禁用,也可以继续使用(更多见下文)

SecurityAdmin:
  extensions:
    - 'APIwesomeTokenExtension'

输出

JSON/XML数据流请求可以应用多个可选过滤器,其中 &filter 仅适用于可见属性

  • &limit=5
  • &sort=Attribute,ORDER
  • &filter1=value
  • &filter2=value

也可以通过数据对象适当的模型管理器进行预览。

preview

美化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