原文:REST Data Service Over In-Memory Data Grid
作者: Yohana Khoury
译者:仲培艺([email protected])
众所周知,REST的实用源于其广泛的用途,然而如果搭配内存计算平台,比如本文中介绍的XAP,你会REST的实用不止如此。
鉴于应用程序编写环境的多样化(甚至是远程),对于数据的储存与获取有着简单与可移植的要求,这也是REST(representational state transfer)往往作为网络服务go-to协议的原因。
然而,在数据服务中使用REST也面临着诸多挑战:
对REST的反思
就其本身而言,REST最好与其他协议共同使用。在追求低延迟信息获取时,可选用本地协议;其他情况下,则可使用REST。
假设有一个客户端和一个服务器,这里需要它们进行信息交互。通常情况下,每台服务器会提供一个API,客户端可依此在服务器上取得恰当的数据。若其为Java,则将使用Java本地协议,而不太会选用REST——本地协议可能会获得更高的性能。
然而,部分应用程序会选用不止一个数据源。其一可能提供Java API,其他的可能是其他类型的API。若所有这些API都能使用REST,对于开发者来说,事情将会变得简单得多,因为这里存在一个统一的协议。REST是一个可以轻松应用于任意平台的协议。
大多数移动网络服务应用程序是远程的,其性能通过其他形式保障,例如分批处理。此处客户端指移动应用,而服务器可能在全国的任一个角落,甚至是世界各地。
在这里,取代每次只发送一个JSON(对象),通过远程访问服务器端的REST API,客户端具备了每次发送一组对象的能力,并统一进行处理。同时,你可以将应用程序中声明的任务发送给服务器进行远程执行。
XAP数据即服务
在GigaSpaces,我们通过XAP设计出REST接口,从而REST可以通过XAP部署。通过XAP,REST服务将可以接受JSON格式。XAP亦有“文档”(Java对象/键值),因此你可以加入动态特性让REST API支持文档。
XAP试用!
代码示例:
请求模式:
“idProperty”: { //required
“propertyName”: “id”,
“autoGenerated”: true, // optional
“indexType”: “BASIC” // optional, use with autoGenerate. SEE com.gigaspaces.metadata.index.SpaceIndexType
“routingProperty”: {
“propertyName”: “id”,
“indexType”: “BASIC” // optional. SEE com.gigaspaces.metadata.index.SpaceIndexType
“fixedProperties”: [
“propertyName”: “id”,
“propertyType”: “int32” // predefined types or full Java class path*
“propertyName”: “prop1”,
“propertyType”: “string”, // predefined types or full Java class path*
“documentSupport”: “DEFAULT” // optional. SEE com.gigaspaces.metadata.SpaceDocumentSupport
“propertyName”: “prop2”,
“propertyType”: “java.util.Map”, // predefined types or full Java class path*
“documentSupport”: “DEFAULT”, // optional. SEE com.gigaspaces.metadata.SpaceDocumentSupport
“storageType”: “DEFAULT” // optional, use with documentSupport. SEE com.gigaspaces.metadata.StorageType
“propertyName”: “indexedProp”,
“propertyType”: “string”, // predefined types or full Java class path*
“indexType”: “BASIC”, // optional. SEE com.gigaspaces.metadata.index.SpaceIndexType
“uniqueIndex”: true // optional, must be used with indexType field only. Default to false.
“compoundIndex”: {
“paths”: [
“prop1”,
“prop2”
“unique”: true // optional
“fifoSupport”: “DEFAULT”, // SEE com.gigaspaces.annotation.pojo.FifoSupport
“blobStoreEnabled”: true,
“storageType”: “DEFAULT”, // SEE com.gigaspaces.metadata.StorageType
“supportsOptimisticLocking”: true,
“supportsDynamicProperties”: false // optional, default to true
Response Schema:
“status”:”success”
Examples:
curl -XPOST -H “Content-Type: application/json” -d ‘{“id”:1, “name”:”myName”, “age”:10}’ http://localhost:8080/MyObject
Response Schema:
“status”:”success”
Examples:
curl -XPOST -H “Content-Type: application/json” -d ‘[{“id”:2, “name”:”John”, “age”:16},{“id”:3, “name”:”Michael”, “age”:18}]’ http://localhost:8080/MyObject
通过REST运用XAP
利用REST接口部署XAP主要针对非Java及.Net客户端的支持。它支持移动应用程序,也同时为防火墙外运行的远程应用程序提供支持。最后,其他应用程序能够轻松地彼此协调运作。在此,数据可以无缝切换,REST应用程序界面也可适用于现代化微服务以及本地云应用。