创建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服务。
- 使用/api/mgmnt创建 .disp .impl 和 .spec 类
使用http://localhost:52773/api/mgmnt/v2/namespace/myapp
注意: 命名空间必须已经存在,myapp可以自己定义,使用POST。
生成成功消息:
{
"msg": "New application myapp created"
}
- 创建Web应用程序 名字:/csp/namespace 分派类:myapp.disp 应用角色: %DB_%DEFAULT
- 补全实现类中的方法
使用^%REST Routine创建REST服务 - 基于 OpenAPI 2.0规范
do ^%REST
使用%REST.API类创建REST服务 - 基于 OpenAPI 2.0规范
可以用它来发现服务器上的REST服务,为这些REST服务生成OpenAPI 2.0规范,并在服务器上创建、更新、或删除REST服务。
- 使用%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...
... - 创建Web应用程序
名字:/csp/namespace
分派类:myapp.disp
应用角色: %DB_%DEFAULT
- 补全实现类中的方法
基于%CSP.REST 手动创建REST 服务 - 不需要定义OpenAPI 2.0规范
- 创建REST 分派类,继承 %CSP.REST 类
- 定义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> } } - 创建REST 服务类,继承 %CSP.REST 类
- 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 } } - 创建Web应用程序
- 名字:/csp/namespace 或其他名字 分派类:REST.Interface.RestHandler 应用角色: %DB_%DEFAULT