REST 服务发布机制简述

发送反馈


在 SuperMap iServer 中,基于 Restlet 机制发布 REST 服务,流程总体上讲,就是构建一个 REST 应用,把该 REST 应用对象部署在一个 HTTP 环境中(Restlet 的 REST 应用可以部署到各种环境中,如 Servlet 容器、OSGI 内核、Spring、Guice Ioc 容器、独立的 JVMS、Groovy、Scala 、JAIN/SLEE 等,目前在 SuperMap iServer 中是部署在了 Servlet 容器中),这样,SuperMap iServer 服务器就能通过 REST 应用对象发布 REST 服务,流程如下:

如上图所示,HTTP 请求先达到 HTTP 环境,由 HTTP 环境传给 REST 应用对象,该对象对应的类继承于 Restlet 中的 Application,根据上下文处理 HTTP 请求,将 HTTP 响应再通过 HTTP 环境返回给客户端。

当一个 HTTP 请求到达 REST 应用对象,REST 应用对象会在 REST 应用上下文中寻找资源配置信息,拿 HTTP 请求的 URI 跟资源配置中的 URI 模板比对,把 HTTP 请求交给 URI 模板最匹配的资源,通过该资源的实现类来处理。逻辑顺序如下图所示:

其中,REST 应用上下文中包含了 REST 应用所需要的资源配置、REST 应用配置、核心组件配置等信息,REST 应用上下文在服务启动时由配置文件得来,如下图所示:

其中资源配置中包含了要发布的资源的 ID、类型、URI 模板、实现类等相关信息,资源的实现通过 REST 应用对象,以对应 URI 模板的形式发布出来。

资源实现类用于处理对应资源的所有内容,每个资源实现类都有一个 HTTP 请求处理器(MethodHandler),用于管理处理 HTTP 请求处理的过程,处理 HTTP 请求的过程逻辑上大致分为如下几步:

  1. 从 HTTP 请求中提取参数信息(参数信息可以为空,即没有参数);

  2. 根据 HTTP 请求头获取正确的参数解析器(Decoder),将 HTTP 请求中的参数解析成 Java 对象;

  3. 根据参数,进行业务逻辑处理,得出响应结果(内容),参数可以为空;

  4. 根据 URI 获取正确的表述生成器(Encoder),将响应结果(内容)转换成对应的表述格式,写入 HTTP 响应对象。

总言之,当 HTTP 请求到达 REST 应用对象,REST 应用对象会根据 URI 寻找合适的资源实现来处理,并将处理的结果作为 HTTP 响应,通过 HTTP 环境返回给客户端,由此构成一个 REST 服务的过程。