Grails Web服务

2024-01-08 17:58
文章标签 服务 web grails

本文主要是介绍Grails Web服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

Web服务

Web服务就是让你的web应用提供一套web API,通常用SOAP 或 REST来实现。 .

1 REST

REST就本身而言不是一种技术,而是一种架构模式。is not really a technology in itself, but more an architectural pattern. REST非常简单,以普通XML或JSON作为通信机制,结合可以表现底层系统状态的URL形式和 HTTP方法如 GET, PUT, POST和 DELETE.

每一个HTTP方法映射到一个action,如用GET方法获取数据,用PUT方法创建数据,用POST更新数据等等。在这个意义上 REST非常适合 CRUD.

 

URL形式

要用Grails实现REST,第一步就是提供REST形式的URL映射 URL映射:

 

static mappings = {"/product/$id?"(resource:"product")
}

这就将URI /product 映射到 ProductController. 在controller内部每个HTTP方法,GET,PUT,POST和DELETE都映射到一个action上,如下表所示:

 

方法Action
GETshow
PUTupdate
POSTsave
DELETEdelete

可以通过URL映射机制修改HTTP方法和URL的映射关系:

 

"/product/$id"(controller:"product"){action = [GET:"show", PUT:"update", DELETE:"delete", POST:"save"]
}

但是在这个例子中,Grails并不像前面使用过的resource 参数那样自动提供XML或JSON序列化,除非提供在URL映射中提供parseRequest 参数:

 

"/product/$id"(controller:"product", parseRequest:true){action = [GET:"show", PUT:"update", DELETE:"delete", POST:"save"]
}

 

XML序列化 - 读取

controller可通过Grails提供的 XML序列化机制 来实现GET方法:

 

import grails.converters.*
class ProductController {def show = {if(params.id && Product.exists(params.id)) {def p = Product.findByName(params.id)render p as XML}else {def all = Product.list()render all as XML}}..
}

这里,如果参数中指定id,通过id 搜索Product 如果指定id的Product存在,则返回该Product,否则返回所有Product. 这样,如果访问 /products我们会得到所有的Product,如果访问/product/MacBook,我们只获取到一个MacBook记录.

 

XML序列化 - 更新

为支持PUTPOST 你可以使用 params 对象。Grails中params对象具有读取XML数据包的能力。如下面的XML数据包:

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<product><name>MacBook</name><vendor id="12"><name>Apple</name></vender>
</product>

你可以通过在 数据绑定章节描述过的同样的方法,通过 params 对象来读取XML数据:

 

def save = {def p = new Product(params['product'])

if(p.save()) { render p as XML } else { render p.errors } }

在这个例子中,通过提取 params 对象中的 'product'对应的值,我们可以通过Product的构建器自动创建和绑定XML数据 。 注意这一行:

def p = new Product(params['product'])

这里我们不需要修改任何代码就可以以处理XML数据请求的方法处理表单提交。同样的方法也可以用来处理JSON请求.

 

如果需要对不同的客户端(REST,HTML等)提供不同的响应,你可以使用 content negotation

The Product object is then saved and rendered as XML, otherwise an error message is produced using Grails' validation capabilities in the form:

 

<error><message>The property 'title' of class 'Person' must be specified</message>
</error>

2 SOAP

Grails通过 XFire 插件来支持SOAP。XFire插件使用流行的XFire SOAP协议栈,它允许你通过特定的expose属性将Grails的 services 作为SOAP服务提供:

 

class BookService {

static expose=['xfire']

Book[] getBooks(){ Book.list() as Book[] } }

WSDL文件可通过: http://127.0.0.1:8080/your_grails_app/services/book?wsdl获取

更多信息参考XFire插件的wiki 文档 。

3 RSS和Atom

Grails没有直接提供对RSS和Atom的支持. You could construct RSS or ATOM feeds with the render method's XML capability. 可以通过Grails Feeds插件来构建RSS和Atom。改插件使用流行的 ROME 库. 下面是简单使用这个插件的例子:

 

def feed = {render(feedType:"rss", feedVersion:"2.0") {title = "My test feed"link = "http://your.test.server/yourController/feed"

Article.list().each() { entry(it.title) { link = "http://your.test.server/article/${it.id}" it.content // return the content } } } }

这篇关于Grails Web服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/584335

相关文章

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

SpringBoot项目Web拦截器使用的多种方式

《SpringBoot项目Web拦截器使用的多种方式》在SpringBoot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍Sprin... 目录一、实现 HandlerInterceptor 接口1、创建HandlerInterceptor实

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾