Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

HTTP リクエスト内のカスタムのルートとペイロードの処理

MATLAB® Production Server™ では、デプロイされた MATLAB 関数を Web リクエスト ハンドラーとして使用できます。これらのハンドラーを使用してリクエストやルートのマッピングのカスタマイズが可能です。

MATLAB Production Server の Web リクエスト ハンドラーは、柔軟なクライアント/サーバー通信を提供します。

  • クライアント プログラマは、RESTful リクエスト内のカスタムの HTTP ヘッダーとペイロードをサーバーに送信できます。

  • サーバー管理者は、デプロイされた MATLAB 関数にリクエスト URL を柔軟にマッピングできます。

  • サーバー管理者は、静的ファイル サービスを提供できます。

  • MATLAB のプログラマは、カスタムの HTTP ハンドラー、HTTP ステータス コード、HTTP ステータス メッセージ、およびペイロードを MATLAB Production Server にデプロイされた関数で返すことができます。

Web リクエスト ハンドラーを作成するには、リクエストのデータを受け入れて返す MATLAB 関数を記述し、それをサーバーにデプロイします。次に、サーバー上の JSON ファイル、その関数を含むデプロイされたアーカイブにパッケージ化された JSON ファイル、またはその両方のファイルで、その関数へのカスタムの URL ルートを指定します。

Web リクエスト ハンドラーの MATLAB 関数の記述

サーバーにデプロイする MATLAB 関数が Web リクエスト ハンドラーとして機能するためには、1 つのスカラー構造体配列を入力として受け入れて、1 つのスカラー構造体配列を出力として返す必要があります。

関数の入力引数の構造体は、クライアント リクエストに関する情報を提供します。それらのリクエストで、クライアントはカスタム HTTP ヘッダーとカスタム ペイロードを送信できます。デプロイされた関数が受け入れることができるペイロードに関して、データ形式の制限はありません。たとえば、関数は、MATLAB Production Server RESTful API で指定されたスキーマではないバイナリ形式、ASCII 形式、CSV データ、または JSON データで生データを受け入れることができます。また、クライアントは Transfer-Encoding: chunked ヘッダーを使用してデータをチャンクで送信できます。チャンク化された転送エンコードでは、サーバーはペイロードをチャンクで受信しますが、入力構造体はペイロード データ全体を受信します。

関数の入力引数の構造体には、以下のフィールドが含まれます。

フィールド名データ型次元説明
ApiVersiondouble1 行 3 列形式 <major> <minor> <fix> での入力構造体スキーマのバージョン
Bodyuint81 行 N 列リクエストのペイロード
HeaderscellN 行 2 列

HTTP リクエスト ヘッダー

cell 配列内の各要素はヘッダーを表します。各要素はキーと値のペアです。ここで、キーは char 型で、値は char 型または double 型です。

HttpVersiondouble1 行 2 列形式 <major> <minor> での HTTP バージョン
Methodchar1 行 N 列HTTP リクエスト メソッド
Pathchar1 行 N 列リクエスト URL のパス

デプロイされた MATLAB 関数は RESTful リクエスト内のカスタムのヘッダーとペイロードを受け入れることができるため、リクエスト ヘッダーのデータに応じて MATLAB 関数の動作を変化させることができます。関数の出力引数の構造体を使用して、レスポンスをカスタムの HTTP ヘッダーとペイロードで返すことができます。サーバー処理エラーがある場合は、設定したカスタム HTTP ヘッダーがオーバーライドされます。MATLAB エラーが発生した場合、サーバーは HTTP 500 Internal Server Error レスポンスを返します。構造体内のフィールドはすべてオプションです。

出力引数の構造体には、以下のフィールドを含めることができます。

フィールド名データ型次元説明
ApiVersiondouble1 行 3 列形式 <major> <minor> <fix> での出力構造体スキーマのバージョン
Bodyuint81 行 N 列レスポンスのペイロード
HeaderscellN 行 2 列

HTTP レスポンスヘッダー

cell 配列内の各要素はヘッダーを表します。各要素はキーと値のペアです。ここで、キーは char 型で、値は char 型または double 型です。

HttpCodedouble1 行 1 列HTTP ステータス コード
HttpMessagechar1 行 N 列HTTP ステータス メッセージ

URL ルートの構成

カスタムの URL ルートを使用すると、サーバーはリクエスト URL 内のパスを、デプロイ可能なアーカイブおよびサーバー上にデプロイされた MATLAB 関数にマッピングできます。URL ルートは、サーバー インスタンス レベルまたはデプロイ可能なアーカイブ レベルで定義できます。

  • "インスタンスレベルのルート" — URL ルートをサーバー インスタンス上の単一の JSON ファイルで定義します。これらのルートは、サーバーにデプロイされたすべてのアーカイブの Web ハンドラー関数にリクエスト URL をマッピングします。 (R2022a 以降)

  • "アーカイブレベルのルート" — 個々のアーカイブの URL ルートをそれぞれの JSON ファイル内で定義し、そのファイルをアーカイブにパッケージ化します。これらのルートは、サーバー上のそのアーカイブ内で定義された Web ハンドラー関数にのみリクエスト URL をマッピングします。アーカイブレベルのルートを使用すると、より適切にルートを整理し、ルートの一致の競合を回避できます。 (R2023b 以降)

これらのルートは組み合わせて定義でき、どちらのタイプのルートもオプションです。

インスタンスレベルのルートの構成

R2022a 以降

デプロイされた MATLAB 関数へのリクエスト URL のマッピングをサーバー インスタンス レベルで指定するには、サーバー上の JSON ファイルを使用できます。既定のファイル名は routes.json で、その既定の場所は $MPS_INSTALL/config フォルダー内です。main_config サーバー構成ファイルで routes-file プロパティの値を変更すると、このファイル名とその場所を変更できます。routes.json を更新した後で、サーバーを再起動する必要があります。

サーバーは、起動時に routes.json ファイルを読み取るように試みます。ファイルが存在しない場合や、ファイルにエラーが含まれている場合、サーバーは開始せず、log-root プロパティで指定されているフォルダー内の main.log ファイルにエラー メッセージが書き込まれます。

既定の routes.json ファイルには、値が 1.0.0version フィールドと空の pathmap フィールドが含まれます。version では、ファイルのスキーマ バージョンが指定されます。その値を変更する必要はありません。カスタムのルートを許可するには、ファイルを編集して pathmap 配列でマッピング ルールを指定します。配列の各オブジェクトが URL ルートに対応します。

インスタンスレベルのルート JSON ファイルのスキーマは次のとおりです。

{
  "version": "1.0.0",
   "pathmap": [
       {
           "match": "<regular_expression>",
           "webhandler": {
               "component": "<name_of_deployable_archive>",
               "function": "<name_of_deployed_function>"
           }
       },
	{
           "match": "<regular_expression>",
           "webhandler": {
               "component": "<name_of_deployable_archive>",
               "function": "<name_of_deployed_function>"
           }
       }
    ]
}

URL マッピング ルールを指定するには、pathmap 配列の match フィールドおよび webhandler フィールドを使用します。

  • クライアント リクエスト URL は、http://host:port/ のようにホスト名とポートの後にスラッシュが含まれている場合のみルートと一致します。

  • match フィールドで、リクエスト URL 内のパスに一致するように、ECMAScript 文法を使用する正規表現を指定します。

    • リクエスト URL が match フィールド内の複数の正規表現と一致する場合、ファイルの先頭から開始して最初の一致が選択されます。そのため、より具体的なパターンからより一般的なパターンの順にパターン一致を指定します。

    • リクエスト URL の部分文字列が一致である場合、正規表現パターンは一致であるとみなされます。たとえば、パターン a/ba/b/a/b、および /x/a/b/y と一致します。ただし、正規表現アンカーである ^ および $ を使用して、特定の文字の前または後の位置と一致させることができます。たとえば、パターン ^a/b$a/b のみと一致します。

    • リクエスト URL 内のクエリ パラメーターと一致する正規表現を指定できます。たとえば、^/clientrequest($|\\W+)/clientrequest と一致し、さらに /clientrequest に語以外の文字と 1 つ以上の追加の文字が続く /clientrequest?foo=bar などとも一致します。語以外の文字の表現 \\W には、JSON をエスケープするために追加のバックスラッシュが必要です。

    • MATLAB Production Server RESTful API を使用する非同期リクエスト実行はサポートされていません。リクエスト実行は同期です。MATLAB Production Server RESTful API の詳細については、MATLAB 関数実行のための RESTful APIを参照してください。

  • webhandler フィールドで、component フィールドを使用して、デプロイ可能なアーカイブの名前を指定し、function フィールドを使用して、リクエスト URL が実行するデプロイされた関数の名前を指定します。

アーカイブレベルのルートの構成

R2023b 以降

アーカイブ固有のルートを使用すると、デプロイ可能なアーカイブの名前でルートを整理し、インスタンスレベルのルート JSON ファイルですべてのルートを指定する場合に発生する可能性がある潜在的なルートの一致の競合を回避できます。

アーカイブ固有のルートは、mcc コマンドを使用して作成されたデプロイ可能なアーカイブでのみサポートされます。アーカイブ固有のルートを使用するには、MATLAB Production Server R2023b 以降と MATLAB Runtime R2023b 以降が必要です。

メモ

  • クライアント リクエスト URL が routes-file 構成プロパティで指定されたインスタンスレベルのルート JSON ファイルとアーカイブ固有のルート ファイルの両方のルートと一致する場合、インスタンスレベルのルートが優先されます。

  • アーカイブ固有のルートを定義する場合は、サーバー インスタンスにインスタンスレベルのルート JSON ファイルが (そのファイルでいずれのルートも指定しない場合でも) 含まれていなければなりません。このファイルを削除したり、routes-file 構成プロパティをコメントアウトしたりしないでください。

アーカイブレベルのルート用のルート JSON ファイルのスキーマは次のとおりです。

{
  "version": "1.0.0",
   "pathmap": [
       {
           "match": "<regular_expression>",
           "webhandler": {
               "function": "<name_of_deployed_function>"
           }
       },
	{
           "match": "<regular_expression>",
           "webhandler": {
               "function": "<name_of_deployed_function>"
           }
       }
    ]
}

このスキーマは、デプロイ可能なアーカイブを指定する component フィールドがオプションであることを除き、インスタンスレベルのルート用に定義するものと同じです。このフィールドを指定する場合、空の文字列 ("") またはデプロイ可能なアーカイブの名前 (.ctf 拡張子は除く) のみを入力として受け入れます。

たとえば、アーカイブ ファイル myarchive.ctf にパッケージ化されたルートについて、以下の webhandler の指定はいずれも有効であり等価です。

  • "webhandler": { "function": "myfunction", "component": "myarchive" }

  • "webhandler": { "function": "myfunction", "component": "" }

  • "webhandler": { "function": "myfunction" }

pathmap オブジェクトを変更せずに、インスタンスレベルのルート JSON ファイルで定義されたルートをアーカイブ固有のルート ファイルに切り替えるには、component フィールドを使用します。

アーカイブレベルのルートは、インスタンスレベルのルートと同様の一致ルールに従います。ただし、一致は 2 番目のパス区切り記号から始まり、クライアント リクエスト URL にスラッシュが続くアーカイブ名が含まれている場合のみ一致する可能性があります。

http://host:port/archive_name/

インスタンスレベルのルート JSON ファイルをデプロイ可能なアーカイブにパッケージ化するには、関数 mcc (MATLAB Compiler)ROUTES 構文を使用します。この構文には MATLAB Compiler SDK™ が必要です。

mcc -U -W 'CTF:archive_name,ROUTES:ArchiveRoutes.json' mfilename1 mfilename2 ... mfilenameN
  • archive_name — 作成するデプロイ可能なアーカイブの名前。例: myarchive

  • ArchiveRoutes.json — アーカイブ固有のルートを含む JSON ファイルの絶対パスまたは相対パス。例: myarchive_routes.json

  • mfilename1 mfilename2 ... mfilenameN — デプロイ可能なアーカイブにパッケージ化する MATLAB 関数ファイル (スペースで区切ります)。例: myfunction1.m myfunction2.m

メモ

アーカイブレベルのルート JSON ファイルの、デプロイ可能なアーカイブへのコンパイルは、mcc コマンドでのみサポートされます。

  • 関数 compiler.build.productionServerArchive (MATLAB Compiler SDK) には、アーカイブレベルのルート JSON ファイルを指定するオプションはありません。

  • Production Server コンパイラ (MATLAB Compiler SDK) アプリでは、アーカイブレベルのルートのテストはサポートされますがパッケージ化はサポートされません。アーカイブレベルのルート JSON ファイルで定義されたルートをテストし、アプリ内からアーカイブをパッケージ化しても、アーカイブにルート ファイルは含まれず、ルートは機能しません。Web ハンドラーのテストの詳細については、Test Web Request Handlers (MATLAB Compiler SDK)を参照してください。

インスタンスレベルのルートを使用した Web リクエスト ハンドラーのデプロイ

R2022a 以降

この例では、サーバー インスタンスにデプロイされたすべてのアーカイブにわたり、定義済みの URL ルートのマッピングを適用する、Web リクエスト ハンドラーのデプロイ方法を示します。

前提条件

  • サーバー インスタンスは既定のホストとポート localhost:9910 で実行します。サーバーの起動の詳細については、Start Server Instance Using Command Lineを参照してください。

  • routes-file 構成プロパティで指定された既定のインスタンスレベルのルート JSON ファイルをサーバー インスタンスで使用します。既定のルート JSON ファイルの場所は $MPS_INSTALL/config/route.json です。

  • auto-deploy-root 構成プロパティで指定された既定の自動デプロイ フォルダーをサーバー インスタンスで使用します。既定の自動デプロイ フォルダーの場所は $MPS_INSTALL/auto_deploy です。

Web ハンドラー関数の記述

Web リクエスト ハンドラーとして機能する 3 つの MATLAB 関数を記述します。これらの関数では、リクエストのヘッダーと本文に関する情報を提供するフィールドをもつ入力引数の構造体 request を使用します。また、それぞれの関数で、成功の HTTP コード、ステータス メッセージ、カスタム ヘッダー、およびメッセージ本文を含むフィールドをもつ構造体 response を作成して返します。

  • 次の関数は、レスポンスの本文で "Hello, name" というテキストを返します。ここで、name はリクエスト URL のクエリ パラメーターで提供される値です。たとえば、?name=MathWorks です。この関数のコードを helloNameHandler.m という名前のファイルに保存します。

    function response = helloNameHandler(request)
        
        params = extractAfter(request.Path,"?");
        name = extractBetween(params,"name=",regexpPattern("($|&)"));
        data = char(sprintf("Hello, %s", name{1}));
        
        response = struct( ...
            'ApiVersion',[1 0 0], ...
            'HttpCode',200, ...
            'HttpMessage','OK', ...
            'Headers', {{'Server' 'WebFunctionTest/1'; ...
                         'X-MyHeader' 'foobar'; ...
                         'X-Request-Body-Len' sprintf('%d', length(request.Body)); ...
                         'Content-Type' 'text/plain';}}, ...
            'Body', uint8(data));
    end
  • 次の関数は、"Hello, World" というテキストを表示します。この関数のコードを helloWorldHandler.m という名前のファイルに保存します。

    function response = helloWorldHandler(request)
        
        data = 'Hello, World';
        
        response = struct( ...
            'ApiVersion',[1 0 0], ...
            'HttpCode',200, ...
            'HttpMessage','OK', ...
            'Headers', {{'Server' 'WebFunctionTest/1'; ...
                         'X-MyHeader' 'foobar'; ...
                         'X-Request-Body-Len' sprintf('%d', length(request.Body)); ...
                         'Content-Type' 'text/plain';}}, ...
            'Body', uint8(data));
    end
  • 次の関数は、既定のハンドラーとして動作し、他のルートに関する情報を提供します。この関数のコードを defaultHandler.m という名前のファイルに保存します。

    function response = defaultHandler(request)
        
        data = 'Use routes /hello and /hello?name=<yourname>.';
    
        response = struct( ...
            'ApiVersion',[1 0 0], ...
            'HttpCode',200, ...
            'HttpMessage','OK', ...
            'Headers', {{'Server' 'WebFunctionTest/1'; ...
                         'X-MyHeader' 'foobar'; ...
                         'X-Request-Body-Len' sprintf('%d', length(request.Body)); ...
                         'Content-Type' 'text/plain';}}, ...
            'Body', uint8(data));
    end

Web ハンドラー関数のパッケージ化

mcc コマンドを使用して、3 つの関数をデプロイ可能なアーカイブにパッケージ化します。デプロイ可能なアーカイブを作成するその他の方法については、MATLAB Production Server 用のデプロイ可能なアーカイブの作成を参照してください。

  • helloNameHandler.mhelloWorldHandler.mhello.ctf という名前のデプロイ可能なアーカイブにパッケージ化します。

    mcc -U -W 'CTF:hello' helloNameHandler.m helloWorldHandler.m
  • defaultHandler.mdefault.ctf という名前のデプロイ可能なアーカイブにパッケージ化します。

    mcc -U -W 'CTF:default' defaultHandler.m

Web ハンドラー関数のデプロイ

アーカイブ hello.ctfdefault.ctf$MPS_INSTALL/auto_deploy フォルダーにコピーしてサーバー インスタンスにデプロイします。サーバー インスタンスにアーカイブをデプロイする他の方法については、MATLAB Production Server へのアーカイブのデプロイを参照してください。

インスタンスレベルのルートの構成

$MPS_INSTALL/config フォルダーで、デプロイされた関数にクライアント リクエストをマッピングするように routes.json ファイルを更新します。既存の JSON を以下に置き換えます。

{
  "version": "1.0.0",
  "pathmap": [
    {
        "match": "^/hello\\?name=(\\w+|$)",
        "webhandler": {
            "component": "hello",
            "function": "helloNameHandler"
        }
    },
    {
      "match": "^/hello$",
      "webhandler": {
          "component": "hello",
          "function": "helloWorldHandler"
      }
    },
    {
      "match": "^/",
      "webhandler": {
          "component": "default",
          "function": "defaultHandler"
      }
    }         
  ]
}

  • ルート "^/hello\\?name=(\\w+|$)" は、"localhost:9910/hello?name=name" の形式のリクエスト URL を関数 helloNameHandler にマッピングします。

  • ルート "^/hello$" は、"localhost:9910/hello" の形式のリクエスト URL を関数 helloWorldHandler にマッピングします。

  • ルート "^/" は、スラッシュを含むリクエスト URL (たとえば、"localhost:9910/""localhost:9910/goodbye""localhost:9910/a/b/c") を関数 defaultHandler にマッピングします。

変更を有効にするために、サーバー インスタンスを再起動します。mps-restart を参照してください。

Web ハンドラー関数へのクライアント リクエストの送信

cURL や Web ブラウザーなどの任意のクライアントを使用して、デプロイされた関数に HTTP リクエストを送信します。

次のコマンドでは、cURL を使用して、デプロイされた関数の 1 つをシステムのコマンド ラインから呼び出しています。出力には、本文のテキストとカスタム ヘッダーを含むレスポンスに関する情報が含まれます。

curl -v http://localhost:9910/hello?name=MathWorks
*   Trying 127.0.0.1:9910...
* Connected to localhost (127.0.0.1) port 9910 (#0)
> GET /hello?name=MathWorks HTTP/1.1
> Host: localhost:9910
> User-Agent: curl/8.0.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: WebFunctionTest/1
< X-MyHeader: foobar
< X-Request-Body-Len: 0
< Content-Type: text/plain
< Content-Length: 16
< Connection: Keep-Alive
<
Hello, MathWorks* Connection #0 to host localhost left intact

次の表に、試すことができる追加のリクエスト URL の例とそれらが一致するルートを示します。

リクエスト URL一致の動作
http://localhost:9910/ルート エントリ "^/" と一致します。
http://localhost:9910/helloルート エントリ "^/hello" と一致します。
http://localhost:9910/hello2ルート エントリ "^/" と一致しますが、リクエスト URL が文字列 "hello" で終わっていないため "^/hello$" とは一致しません。
http://localhost:9910/hello?name=MathWorksルート エントリ "^/hello\\?name=(\\w+|$)" と一致します。
http://localhost:9910/hello?foo=bar&name=MathWorksルート エントリ "^/" と一致しますが、リクエスト URL で name クエリ パラメーターしか指定できないため "^/hello\\?name=(\\w+|$)" とは一致しません。

アーカイブレベルのルートを使用した Web リクエスト ハンドラーのデプロイ

R2023b 以降

この例では、サーバーにデプロイされた特定のアーカイブにのみ URL ルートのマッピングを適用する Web リクエスト ハンドラーのデプロイ方法を示します。

前提条件

  • サーバー インスタンスは既定のホストとポート localhost:9910 で実行します。サーバーの起動の詳細については、Start Server Instance Using Command Lineを参照してください。

  • routes-file 構成プロパティで指定された既定のインスタンスレベルのルート JSON ファイルをサーバー インスタンスで使用します。既定のルート JSON ファイルの場所は $MPS_INSTALL/config/route.json です。

  • auto-deploy-root 構成プロパティで指定された既定の自動デプロイ フォルダーをサーバー インスタンスで使用します。既定の自動デプロイ フォルダーの場所は $MPS_INSTALL/auto_deploy です。

また、この例を実行するには、MATLAB Production Server R2023b 以降と MATLAB Runtime R2023b 以降を使用する必要があります。

Web ハンドラー関数の記述

Web リクエスト ハンドラーとして機能する 2 つの MATLAB 関数を記述します。これらの関数では、リクエストのヘッダーと本文に関する情報を提供するフィールドをもつ入力引数の構造体 request を使用します。また、それぞれの関数で、成功の HTTP コード、ステータス メッセージ、カスタム ヘッダー、およびメッセージ本文を含むフィールドをもつ構造体 response を作成して返します。

  • 次の関数は、"Hello, name" というテキストを表示します。ここで、name はリクエスト URL のクエリ パラメーターで提供される値です (たとえば ?name=MathWorks)。リクエストにクエリ パラメーターが含まれていない場合、代わりに "Hello" と表示します。この関数のコードを helloHandler.m という名前のファイルに保存します。

    function response = helloHandler(request)
        
        params = extractAfter(request.Path,"?");
        name = extractBetween(params,"name=",regexpPattern("($|&)"));
    
        if isempty(name) || strcmp(name, "")
            data = 'Hello';
        else
            data = char(sprintf("Hello, %s", name{1}));
        end
        
        response = struct( ...
            'ApiVersion',[1 0 0], ...
            'HttpCode',200, ...
            'HttpMessage','OK', ...
            'Headers', {{'Server' 'WebFunctionTest/1'; ...
                         'X-MyHeader' 'foobar'; ...
                         'X-Request-Body-Len' sprintf('%d', length(request.Body)); ...
                         'Content-Type' 'text/plain';}}, ...
            'Body', uint8(data));
    end
  • 次の関数は、前の関数と同様ですが、代わりに "Goodbye, name" または "Goodbye" と表示します。この関数のコードを goodbyeHandler.m という名前のファイルに保存します。

    function response = goodbyeHandler(request)
        
        params = extractAfter(request.Path,"?");
        name = extractBetween(params,"name=",regexpPattern("($|&)"));
    
        if isempty(name) || strcmp(name, "")
            data = 'Goodbye';
        else
            data = char(sprintf("Goodbye, %s", name{1}));
        end
        
        response = struct( ...
            'ApiVersion',[1 0 0], ...
            'HttpCode',200, ...
            'HttpMessage','OK', ...
            'Headers', {{'Server' 'WebFunctionTest/1'; ...
                         'X-MyHeader' 'foobar'; ...
                         'X-Request-Body-Len' sprintf('%d', length(request.Body)); ...
                         'Content-Type' 'text/plain';}}, ...
            'Body', uint8(data));
    end

Web ハンドラー関数のパッケージ化とデプロイ

関数 helloHandlergoodbyeHandler を同じアーカイブにパッケージ化し、それをサーバーにデプロイします。パッケージ化されたアーカイブに、それらの関数への URL ルートを含む JSON ファイルを含めます。

  1. アーカイブ固有の JSON ファイルを作成して、2 つの関数へのルートを定義します。次の JSON を greet.json という名前のファイルに保存します。

    {
      "version": "1.0.0",
      "pathmap": [
        {
            "match": "^/hello$",
            "webhandler": {
                "function": "helloHandler"
            }
        },
        {
            "match": "^/hello\\?name=(\\w+|$)",
            "webhandler": {
                "function": "helloHandler"
            }
        },
        {
            "match": "^/goodbye$",
            "webhandler": {
                "function": "goodbyeHandler"
            }
        },
        {
            "match": "^/goodbye\\?name=(\\w+|$)",
            "webhandler": {
                "function": "goodbyeHandler"
            }
        }       
      ]
    }
    • 最初の 2 つのルートは、"localhost:9910/archive_name/hello または "localhost:9910/archive_name/hello?name=name" の形式のリクエスト URL を関数 helloHandler にマッピングします。

    • 最後の 2 つのルートは、"localhost:9910/archive_name/goodbye または "localhost:9910/archive_name/goodbye?name=name" の形式のリクエスト URL を関数 goodbyeHandler にマッピングします。

    • archive_name は、次の手順で作成するデプロイ可能なアーカイブの名前です。

  2. helloHandler.mgoodbyeHandler.mgreet.ctf という名前のデプロイ可能なアーカイブにパッケージ化します。mcc コマンドの ROUTES 構文を使用して、hello.json ルート ファイルをアーカイブにパッケージ化します。

    mcc -U -W 'CTF:greet,ROUTES:greet.json' helloHandler.m goodbyeHandler.m
  3. アーカイブ greet.ctf をサーバー インスタンスの $MPS_INSTALL/auto_deploy フォルダーにコピーしてサーバー インスタンスにデプロイします。変更を有効にするためにサーバーを再起動する必要はありません。

Web ハンドラー関数へのクライアント リクエストの送信

cURL や Web ブラウザーなどの任意のクライアントを使用して、デプロイされた関数に HTTP リクエストを送信します。

次のコマンドでは、cURL を使用して、デプロイされた関数の 1 つをシステムのコマンド ラインから呼び出しています。出力には、本文のテキストとカスタム ヘッダーを含むレスポンスに関する情報が含まれます。

curl -v http://localhost:9910/greet/hello?name=MathWorks
*   Trying 127.0.0.1:9910...
* Connected to localhost (127.0.0.1) port 9910 (#0)
> GET /hello?name=MathWorks HTTP/1.1
> Host: localhost:9910
> User-Agent: curl/8.0.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: WebFunctionTest/1
< X-MyHeader: foobar
< X-Request-Body-Len: 0
< Content-Type: text/plain
< Content-Length: 16
< Connection: Keep-Alive
<
Hello, MathWorks* Connection #0 to host localhost left intact

次の表に、試すことができる追加のリクエスト URL の例とそれらが一致するルートを示します。

リクエスト URL一致の動作
http://localhost:9910/greet/helloルート エントリ "^/hello$" と一致します。
http://localhost:9910/greet/hello?name=MATLABルート エントリ "^/hello\\?name=(\\w+|$)" と一致します。
http://localhost:9910/greet/goodbyeルート エントリ "^/goodbye$" と一致します。
http://localhost:9910/greet/goodbye?name=MATLABルート エントリ "^/goodbye\\?name=(\\w+|$)" と一致します。
http://localhost:9910/helloリクエスト URL にアーカイブ名を含むパス セグメントが含まれていないため、いずれのルート エントリとも一致しません。

関連するトピック