2011-11-08 3 views
0

내 웹 사이트에 Rest WS를 구현하는 방법을 배우기 시작했지만 조금 어려웠습니다. 제 생각은 아주 간단한 예제로 시작하는 것입니다. 기본을 이해하면 더 복잡한 가이드를 이해할 수 있습니다. 2 개의 텍스트 필드가있는 양식이 있다고 가정하면 2 개의 숫자를 소개 한 다음이 두 숫자의 곱셈이 표시됩니다.Grails Rest 간단한 계산기 예

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

나에 대한 도움이 필요합니다 :

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> 

결과보기 이것은 그 수행하는 코드입니다 을 - 처리 HTTP와 나머지 요청 (Grails는 어느 것이 요청되는지를 알 것이다) - 요청을 보내기위한 새로운 클래스를 생성한다 (두 개의 숫자를 입력으로, 출력으로 t).

추신. 미안하지만 이것은 너무 기본적인 것이지만 웹상에서 그러한 기본 정보를 찾을 수 있다면 정말 그런 것을 묻지 않을 것입니다. 미리 감사드립니다. PP

답변

1

컨트롤러에 REST 요청을 전달하려면 UrlMappings.groovy 파일을 수정하여 전송하려는 구문과 같은 요청을 처리해야합니다. 여러 개의 두 숫자에 대한 REST 요청은 example.com/multiply/5/6처럼 보일 수 있으며 그 결과로 30을 얻게됩니다.

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

을 아니면 빼기와 같은 다른 작업을 지원하기를 원한다면, 추가 : Grails에 당신의 CalculatorController의 CALC 방법에 그 요청을 보내도록하려면 UrlMappings.groovy이 같은 줄을 추가 것 의 URL에 컨트롤러를 이동

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

심지어 : 등, 당신은 그 각각의 이름과 방법을 만들 것입니다 다음과 같이 매핑에 곱셈 대신에 $ 조치를 넣어 궁극의 확장 성 :

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

컨트롤러 메서드에 적절한 매개 변수가 채워진 상태에서 원하는대로 원하는대로 요청을 라우팅합니다. 컨트롤러에서 withFormat 클로저를 사용하여 요청한 content-type을 기반으로 다양한 형식 (XML, JSON, HTML)으로 결과를 다시 보낼 수도 있습니다 (withFormat 사용법에 대한 자세한 내용은 grails docs를 참조하십시오).

클래스를 요청할 때 어떤 의미인지 확실하지 않습니다. 앱은 다른 REST 서비스와 마찬가지로이 REST 서비스를 호출 할 수 있습니다. 아니면 그 일을하는 모범을 찾고 있습니까? 그렇다면 Grails의 REST client facilities plug-in을 살펴보십시오. 이 blog entry은 Grails로 REST 컨트롤러와 호출을 만드는 데 유용하다.

UPDATE

그루비를 사용하여 REST 서비스에 액세스하려면 다음이 같은 서비스를 호출 할 수 있습니다 HTTPBuilder (http://groovy.codehaus.org/modules/http-builder/doc/rest.html에서 그것을 얻을)의 위해 RESTClient 확장을 사용해보십시오 :

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 question에서 확인할 수도 있습니다.

+0

답변 해 주셔서 감사합니다. 내가 수업에서 말하는 것은 (클라이언트로서) 내가 그 웹 서비스에 접근 할 수있는 방법이다. – recoInrelax

+0

어떻게 접근 할 수 있는지 예제 코드를 제공해 주시겠습니까? 나는 그것을 작동시키지 않을거야. – recoInrelax

+0

당신이 일을 못하고있는 이유를 설명 할 수 있니? REST 서비스에 액세스 할 때 javascript 또는 groovy를 원하십니까? – Todd

1

내가 지금까지 본 Grails 기사를위한 최고의 REST 기사 중 하나에 대한 링크입니다. RESTful 및 RESTlike 서비스가 의미하는 바는 물론 서비스 작성 방법을 명확하게 설명합니다. 형식 협상 비트에주의하고 Grails 안내서에 언급 된 withFormat {} DSL을 기억하십시오.

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

는 지금까지 서비스에 대한 클라이언트로 - 당신은 정말 (엽차의 ExtJS로 또는 JQuery와 확인)하여 REST 서비스에서 JSON/XML 데이터를 처리하는 JS 라이브러리를합니다. 처음 페이지가로드 된 후에 모든 원격 요청을 수행하지 않는 한 GSP 페이지를 고수하는 경우 REST 서비스를 실제로 사용하지 않는 것입니다.