文章
Jingwei Wang · 三月 24 阅读大约需 3 分钟

创建REST 服务

 

REST是一种架构风格,而不是一种格式。尽管REST经常使用HTTP来传输消息,使用JSON来传递数据,但你也可以用XML或纯文本来传递数据。REST利用了现有的网络标准,如HTTP、URL、XML和JSON。

虽然它可以使用XML来描述数据,但它更常使用JSON,这是一个轻量级的数据封装器。

InterSystems REST服务

InterSystems REST服务由以下组件组成:

规范类(%REST.Spec的一个子类):这个类包含了REST服务的OpenAPI 2.0规范(Swagger)。InterSystems支持几个扩展属性,你可以在规范中使用。

调度类(%CSP.REST的一个子类):这个类负责接收HTTP请求并在实现类中调用合适的方法。

实现类(%REST.Impl的子类):这个类定义了实现REST调用的方法。

Web应用程序:它通过InterSystems Web Gateway提供对REST服务的访问。

 

使用API 管理工具创建REST服务 - 基于 OpenAPI 2.0规范

/api/mgmnt/

可以使用/api/mgmnt服务来创建、更新和删除REST服务。

  1. 使用/api/mgmnt创建 .disp .impl 和 .spec 类

使用http://localhost:52773/api/mgmnt/v2/namespace/myapp

注意: 命名空间必须已经存在,myapp可以自己定义,使用POST。

生成成功消息:

{
   "msg": "New application myapp created"
}

 

  1. 创建Web应用程序 名字:/csp/namespace 分派类:myapp.disp 应用角色: %DB_%DEFAULT
  2. 补全实现类中的方法

 

使用^%REST Routine创建REST服务 - 基于 OpenAPI 2.0规范

do ^%REST

 

使用%REST.API类创建REST服务 - 基于 OpenAPI 2.0规范

可以用它来发现服务器上的REST服务,为这些REST服务生成OpenAPI 2.0规范,并在服务器上创建、更新、或删除REST服务。

  1. 使用%REST.API 创建 .disp .impl 和 .spec 类
set file="c:/temp/swagger.json"
set obj = ##class(%DynamicAbstractObject).%FromJSON(file)
do ##class(%REST.API).CreateApplication("petstore",.obj,,.new,.error)
//examine error and decide how to proceed...
... 
  1. 创建Web应用程序

名字:/csp/namespace

分派类:myapp.disp

应用角色: %DB_%DEFAULT

  1. 补全实现类中的方法

 

基于%CSP.REST 手动创建REST 服务 - 不需要定义OpenAPI 2.0规范

  1. 创建REST 分派类,继承 %CSP.REST 类
  2. 定义URL map
    Class REST.Interface.RestHandler Extends %CSP.REST
    {
    ​
    Parameter CONTENTTYPE = "application/json";
    ​
    Parameter CONVERTINPUTSTREAM = 1;
    ​
    Parameter CHARSET = "utf-8";
    ​
    XData UrlMap
    {
    <Routes>
       <Map Prefix="/coffee/sales" Forward="MyLib.coffee.SalesREST"/>
       <Map Prefix="/coffee/repairs" Forward="MyLib.coffee.RepairsREST"/>
       <Map Prefix="/coffee" Forward="MyLib.coffee.MiscREST"/>
     </Routes>
    }
    }
    ​
  3. 创建REST 服务类,继承 %CSP.REST 类
  4. REST 服务类URL map 定义,例如MyLib.coffee.SalesREST类中URL map定义REST 服务类
    Class MyLib.coffee.SalesREST Extends %CSP.REST
    {
    ​
    Parameter HandleCorsRequest = 1;
    ​
    XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
    {
     <Routes>
       <Route Url="/request" Method="GET" Call="Request" />
    <Route Url="/request" Method="POST" Call="Request" />
     </Routes>
    }
    ​
    /// 根据文档号,输出其HTML格式
    /// pDocNo:文档编号
    ClassMethod Request() As %Status
    {
       #dim tSC As %Status = $$$OK    
       #dim e As %Exception.AbstractException    
       Try     
      {    
           Set tSC = ##class(REST.Util).GetSales(pName)
           W tSC
      } 
       Catch (e) 
      {        
           Set tSC=e.AsStatus()    
      }    
       Return tSC
    }
    }
    ​
  5. 创建Web应用程序
  6. 名字:/csp/namespace 或其他名字 分派类:REST.Interface.RestHandler 应用角色: %DB_%DEFAULT
0
0 19
讨论 (0)1
登录或注册以继续