2011-11-08 21 views
0

私は自分のウェブサイトでRest WSを実装する方法を学び始めましたが、少し難解でした。私の考えは、非常に簡単な例から始めることです。基本を理解すると、より複雑なガイドを理解することができます。 2つのテキストフィールドを持つフォームがあるとすると、2つの数字を導入し、それらの2つの数字の乗算を示します。これは、それを達成するためのコードです:Grails Rest簡単な電卓の例

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> 

私はのための助けが必要です を - 両方のhttpを処理し、要求を休みます(Grailsはどちらが要求されているか知っているでしょう) - リクエストを送信するための新しいクラスを作成します(2つの数字を入力として、 tを出力とする)。

PS。申し訳ありませんが、これはあまりにも基本的ですが、ウェブ上でこのような基本情報を見つけることができれば、本当にそのようなことは尋ねません。 ありがとうございます。 PP

答えて

1

コントローラにREST要求をルーティングするには、UrlMappings.groovyファイルを変更して、送信したいような構文に従って要求を処理したいとします。複数の2つの番号へのREST要求はexample.com/multiply/5/6のようになり、結果として30が返されます。 Grailsのは、あなたのCalculatorControllerのCALCメソッドにその要求を送信するようにするには、あなたのUrlMappings.groovyにこのような行を追加したい:

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

それとも、他の操作をサポートしたい場合は、減算のように、追加します以下のためのURLにコントローラを移動

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

あるいは:など、あなたがそれらのそれぞれの名前を持つメソッドを作成したいと思いますし、このように、マッピングに乗算の代わりに$アクションを置きます究極の拡張性:

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

これは、コントローラメソッドに適切なパラメータを入力して、適切なアクションを実行するようにリクエストをルーティングします。また、コントローラでwithFormatクロージャを使用して、要求されたコンテンツタイプに基づいて様々な異なるフォーマット(XML、JSON、HTML)で結果を返すこともできます(withFormatの使い方については、grails docsを参照してください)。

リクエストを送信するクラスについてどういう意味が分かりません。アプリは他のRESTサービスと同じようにこのRESTサービスを呼び出すことができます。それとも、そういう事例をお探しですか?もしそうなら、GrailsのREST client facilities plug-inを見てください。このblog entryは、GrailsでRESTコントローラと呼び出しを行う場合に便利です。 Groovyのを使用してRESTサービスにアクセスするには

UPDATE

、そして、あなたがこのようなサービスへの呼び出しを行うことができます(http://groovy.codehaus.org/modules/http-builder/doc/rest.htmlでそれを得る)HTTPBuilderの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

これまでに見たRails for Grailsの記事へのリンクです。 RESTfulおよびRESTlikeサービスの意味とその記述方法を明確に説明しています。フォーマットネゴシエーションビットに注意し、Grailsガイドに記載されているwithFormat {} DSLを覚えておいてください。限り、あなたのサービスのクライアントとして

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

- あなたは本当に(煎茶のExtJSのかはJQueryをチェックしてください)あなたのRESTサービスからJSON/XMLデータを処理するJSライブラリをしたいです。 GSPページに固執すると、最初のページロード後にすべてのリモートリクエストを実行していない限り、実際にRESTサービスを利用していないことになります。