基于内存数据网格的REST数据服务

原文: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最好与其他协议共同使用。在追求低延迟信息获取时,可选用本地协议;其他情况下,则可使用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

基于内存数据网格的REST数据服务_第1张图片

Response Schema:

“status”:”success”

Examples:

curl -XPOST -H “Content-Type: application/json” -d ‘{“id”:1, “name”:”myName”, “age”:10}’ http://localhost:8080/MyObject

基于内存数据网格的REST数据服务_第2张图片

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应用程序界面也可适用于现代化微服务以及本地云应用。

你可能感兴趣的:(基于内存数据网格的REST数据服务)