Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

[ Image Removed |../../../index.htm#lansa/webserviceseng01_0130.htm]
現在地: Webサービス > Webサービスの利用 > チュートリアル 1 - Google 翻訳 API > HTTP 要求のコーディング

...

いよいよ自分の RDML コーディングをする時が来ました。

URL の構築には XPRIM_UriBuilder を使用し、JSON 応答の読み込みには XPRIM_RandomAccessJsonReader を使用します。

GoogleTranslateServerModule という名前の新規サーバー・モジュールを作成し、必要なフィールドを宣言します。

     Begin_Com Role(*EXTENDS #PRIM_SRVM)
 
End_Com

最初に次のフィールドを定義します。

     Define Field(#TargetLanguage) Type(*NVARCHAR) Length(10)
Define Field(#SourceLanguage) Type(*NVARCHAR) Length(10)
Define Field(#SourceText) Type(*NVARCHAR) Length(500)
Define Field(#TranslatedText) Type(*NVARCHAR) Length(500)
Define Field(#ErrorCode) Type(*NVARCHAR) Length(50)
Define Field(#ErrorMessage) Type(*NVARCHAR) Length(200)
Define Field(#OK) Type(*BOOLEAN)

Translate という名前の新しいサーバー・ルーチンを作成します。

     Srvroutine Name(Translate)
 
Endroutine

次の入力・出力パラメータをサーバー・ルーチンに追加します。

* 入力フィールドの定義

     Field_Map For(*INPUT) Field(#SourceText)
Field_Map For(*INPUT) Field(#TargetLanguage)
Field_Map For(*INPUT) Field(#SourceLanguage)

* 出力フィールドの定義

     Field_Map For(*OUTPUT) Field(#OK)
Field_Map For(*OUTPUT) Field(#TranslatedText)
Field_Map For(*OUTPUT) Field(#ErrorCode)
Field_Map For(*OUTPUT) Field(#ErrorMessage)

サーバー・ルーチンの最初に以下の変数を宣言します。

     Define_Com Class(#XPRIM_HttpRequest) Name(#HttpRequest)
Define_Com Class(#XPRIM_UriBuilder) Name(#Url)
Define_Com Class(#XPRIM_RandomAccessJsonReader) Name(#Reader)

URL ホスト、パスおよびクエリ文字列に値を入れます。

     #Url.SetScheme( 'https' )
#Url.SetHost( 'www.googleapis.com' )
#Url.SetPath( '/language/translate/v2' )
#Url.AddQueryString( 'q' #SourceText )
#Url.AddQueryString( 'target' #TargetLanguage )
#Url.AddQueryString( 'format' 'text' )
#Url.AddQueryString( 'source' #SourceLanguage )
#Url.AddQueryString( 'key' '<前のステップで取得した api キー>' )

URL により指定された要求を実行します。

     #HttpRequest.DoGet Url(#Url)

次に JSON 応答から翻訳されたテキストを取得する必要があります。

前のステップ (Postman を使用) にもありましたが、JSON 応答の正常時の応答がどのようなものになるか思い出してください。Image Added

...








"翻訳されたテキスト" の値へのパスは次のようになります。

     data/translations/1/translatedText

まずは、要求が正常に実行されたかどうかを確認する必要があることを忘れないでください。これは、サーバーからの応答の有無 (IsSucessfulRequest プロパティ)、正常な応答を受信したかどうか (IsSuccessHttpStatusCode) をチェックすることで確認できます。

エラー発生時の JSON 応答を思い出してください。

...

Image Added








エラー・メッセージへのパスは以下になります。

     error/message

以下は JSON 応答から翻訳されたテキストを抽出するコードです。

* サーバーからの応答の有無を確認

     If (#HttpRequest.Response.IsSuccessfulRequest)

...

      * HTTP 応答を JsonReader オブジェクトにフィード

...

        #Reader.SetSourceHttpResponse Httpresponse(#HttpRequest.Response)

     * サーバーから正常な応答を取得したか確認

...

       If (#HttpRequest.Response.IsSuccessHttpStatusCode)

...

          * 結果の (翻訳された) テキストを取得

...

          #TranslatedText := #Reader.ReadStringWithPath( 'data/translations/1/translatedText' )

...

          #OK := True

...

       Else

...

          * エラー・コードおよびエラー・メッセージを JSON 応答から取得

...

          #ErrorCode := #Reader.ReadStringWithPath( 'error/code' )

...

          #ErrorMessage := #Reader.ReadStringWithPath( 'error/message' )

...

          #OK := False

...

      Endif
Else

   * サーバーからの応答無し
   * 応答オブジェクトからの転送エラーを取得

...

      #OK := False
   #ErrorCode := #HttpRequest.Response.ErrorCode

...

      #ErrorMessage := #HttpRequest.Response.ErrorMessage
Endif


次は: Web ページを作成して、サーバー・モジュールをテスト

...