Web services GrailsREST简单计算器示例

Web services GrailsREST简单计算器示例,web-services,rest,grails,Web Services,Rest,Grails,我开始学习如何在我的网站上实现Rest WS,但我发现这有点困难。我的想法是从一个非常简单的例子开始,当我理解了基础知识后,我将能够理解更复杂的指南。假设我们有一个包含2个文本字段的表单,我们引入2个数字,然后显示这两个数字的乘法。这是实现以下目标的代码: class CalculatorController { def index = { } def calc = { def nr_1 = params.first_nr def nr_2 =

我开始学习如何在我的网站上实现Rest WS,但我发现这有点困难。我的想法是从一个非常简单的例子开始,当我理解了基础知识后,我将能够理解更复杂的指南。假设我们有一个包含2个文本字段的表单,我们引入2个数字,然后显示这两个数字的乘法。这是实现以下目标的代码:

class CalculatorController {

    def index = { }

    def calc = {
        def nr_1 = params.first_nr
        def nr_2 = params.second_nr
        def result
        def erro = 'no'

        if(nr_1.isInteger() && nr_2.isInteger())
        result = nr_1.toInteger() * nr_2.toInteger()
        else
        erro = 'yes'
        chain(action:"print_result", model:[erro: erro, result: result, nr1: nr_1, nr2: nr_2])
    }

    def print_result = {

        if(chainModel.erro.equals('yes'))
        [sms : 'Please introduce only 2 numbers!']
        else
        [sms: 'The result of the multiplication of ' + chainModel.nr1 + ' with ' + chainModel.nr2 + ' is ' + chainModel.result]

    }

}
主要观点:

<html>
    <head>
        <title></title>
        <meta name="layout" content="main" />
        <style type="text/css" media="screen">
        </style>
    </head>
    <body>

      This program is a calculator:<br><br>
      <g:form name="myForm" action="calc">
      <h1>Introduce first number: </h1><g:textField name="first_nr" value="${myValue}" /> <br>
      <h1>Introduce second number: </h1><g:textField name="second_nr" value="${myValue}" /> <br>
      <g:submitButton name="update" value="Update" />
      </g:form>
    </body>
</html>

此程序是一个计算器:

介绍第一个号码:
介绍第二个号码:
结果视图:

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Sample title</title>
  </head>
  <body>
    <h1>${sms}</h1>
  </body>
</html>

示例标题
${sms}
我需要以下方面的帮助: -处理http和rest请求(Grails将知道请求的是哪一个) -创建一个新类来发送请求(两个数字作为输入,结果作为输出)

如果这太基本了,我很抱歉,但如果我能在网上找到这样的基本信息,我不会问这样的问题。 提前感谢,,
PP

要将REST请求路由到控制器,您需要修改UrlMappings.groovy文件,以按照您想要发送的语法处理请求。对多个两个数字的REST请求可能类似于
example.com/multiply/5/6
,结果返回30。要让Grails将该请求发送到CalculatorController的calc方法,您需要在UrlMappings.groovy中添加如下行:

"/multiply/$first_nr/$second_nr"(controller:"calculator", action:"calc")
或者,如果您希望支持其他操作,如减法、加法等,您可能希望为每个操作创建名称为的方法,然后在映射中使用$action代替乘法,如下所示:

"/$action/$first_nr/$second_nr"(controller:"calculator")
import groovyx.net.http.RESTClient

def calculator = new RESTClient( 'http://example.com/myapp/' )
def resp = calculator.get( path : 'multiply/5/5' )
assert resp.status == 200
assert resp.data == "The result of the multiplication of 5 with 5 is 25"
或者甚至将控制器移动到URL中,以实现最终的可扩展性:

"/$controller/$action/$first_nr/$second_nr"{}
这将按照您希望的方式路由您的请求到适当的操作,并为您的控制器方法填充适当的参数。您还可能希望在控制器中使用withFormat闭包,根据请求的内容类型以各种不同的格式(XML、JSON、HTML)发回结果(有关withFormat用法的更多信息,请参阅grails文档)

我不知道你说的发送请求的类是什么意思。应用程序可以调用此REST服务,就像调用任何其他REST服务一样。或者你正在寻找一个这样做的例子?如果是这样,请查看Grails的示例。您还可能会发现这对于使用Grails创建REST控制器和调用很有用

更新

要使用Groovy访问REST服务,请尝试使用HTTPBuilder的RESTClient扩展(在
http://groovy.codehaus.org/modules/http-builder/doc/rest.html
)然后您可以像这样拨打服务电话:

"/$action/$first_nr/$second_nr"(controller:"calculator")
import groovyx.net.http.RESTClient

def calculator = new RESTClient( 'http://example.com/myapp/' )
def resp = calculator.get( path : 'multiply/5/5' )
assert resp.status == 200
assert resp.data == "The result of the multiplication of 5 with 5 is 25"

您还可以在另一个平台上找到有关groovy和REST的更多信息。

这里是到目前为止我看到的最好的REST for Grails文章之一的链接。它清楚地解释了RESTful和RESTlike服务的含义以及如何编写它们。注意格式协商位,并记住Grails指南中提到的withFormat{}DSL

至于您服务的客户端,您确实需要一个JS库来处理REST服务中的JSON/XML数据(请查看Sencha的ExtJS或JQuery)。
如果您坚持使用GSP页面,那么您就不会真正使用REST服务,除非您在初始页面加载后执行所有远程请求。

谢谢您的回答。我所说的类是指如何(作为客户机)访问该Web服务。请提供示例代码,说明如何访问该Web服务?我不能让它工作你能解释一下你不能工作的是什么吗?你想要一个访问REST服务的例子是javascript还是groovy?我需要的是一个如何访问ws的例子。您向我解释的部分是可以理解的:p groovy将完成fineok。非常感谢你。我终于明白了这是怎么回事:p