Пример простого калькулятора Grails Rest - PullRequest
0 голосов
/ 09 ноября 2011

Я начал изучать, как реализовать 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>

Мне нужна помощь для:и запрос rest (Grails будет знать, какой из них запрашивается) - создайте новый класс для отправки запроса (два числа в качестве ввода, результат в качестве вывода).

PS.Извините, если это слишком просто, но я бы не стал спрашивать об этом, если бы мог найти такую ​​основную информацию в Интернете.Заранее спасибо, PP

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

Вот ссылка на одну из лучших статей о REST для Grails, которую я когда-либо видел.В нем четко объясняется, что подразумевается под RESTful и REST-подобными сервисами, а также как их писать.Обратите внимание на бит согласования формата и помните о DSL withFormat {}, который упоминается в Руководстве по Grails.

http://www.ibm.com/developerworks/library/j-grails09168/

Что касается клиента для вашего сервиса - вы действительно хотитебиблиотека JS, которая будет обрабатывать данные JSON / XML из ваших REST-сервисов (посмотрите ExtJS или JQuery от Sencha).Если вы придерживаетесь страниц GSP, то на самом деле вы не используете свои службы REST, если только вы не выполняете все удаленные запросы после начальной загрузки страницы.

1 голос
/ 09 ноября 2011

Чтобы направить запрос REST на ваш контроллер, вам нужно изменить файл UrlMappings.groovy для обработки запросов в соответствии с синтаксисом, аналогичным тому, который вы хотите отправить.Запрос REST для нескольких двух чисел может выглядеть как example.com/multiply/5/6, и в результате вы получите 30 обратно.Чтобы Grails отправил запрос на это в метод calc вашего CalculatorController, вы должны добавить такую ​​строку в свой UrlMappings.groovy:

"/multiply/$first_nr/$second_nr"(controller:"calculator", action:"calc")

Или, если вы хотите поддерживать другие операции, такие как вычитание, добавьте и т. д., вы хотите создать методы с именем для каждого из них, а затем поместить $ action вместо multiply в отображении, например:

"/$action/$first_nr/$second_nr"(controller:"calculator")

или даже переместить контроллер вURL для максимальной расширяемости:

"/$controller/$action/$first_nr/$second_nr"{}

Это перенаправит ваш запрос, как вы хотите, на соответствующее действие с соответствующими параметрами, заполняемыми для вашего метода контроллера.Вы также можете использовать закрытие withFormat в своем контроллере для отправки результата в различных форматах (XML, JSON, HTML) в зависимости от запрошенного типа контента (см. Документацию grails для получения дополнительной информации об использовании withFormat).

Я не уверен, что ты имеешь в виду под классом для отправки запроса.Приложение может вызывать эту службу REST так же, как любая другая служба REST.Или вы ищете пример этого?Если это так, посмотрите на плагин клиентских средств REST *1014* для Grails.Вы также можете найти эту запись в блоге полезной для создания контроллеров REST и вызовов с помощью Grails.

ОБНОВЛЕНИЕ

Чтобы получить доступ к службе REST с помощью Groovy,попробуйте использовать расширение RESTClient HTTPBuilder (получите его на http://groovy.codehaus.org/modules/http-builder/doc/rest.html). Затем вы можете позвонить в службу, например так:

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 на другом stackoverflow вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...