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

相关文章

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

关于DNS域名解析服务

《关于DNS域名解析服务》:本文主要介绍关于DNS域名解析服务,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录DNS系统的作用及类型DNS使用的协议及端口号DNS系统的分布式数据结构DNS的分布式互联网解析库域名体系结构两种查询方式DNS服务器类型统计构建DNS域

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.