REST API作成機能で、POSTによるCREATEを試してみました。こっちも簡単に作成できました。フレームワークの支援がある環境の開発と比較すると、このくらいの機能だとあまり差がでないかも知れませんが、複雑になってくるとプログラム開発がいらないぶんOutSystems使ったほうが楽でしょうね。
逆にあまり複雑になると、.NETかJavaでカスタム開発が必要になり、それならプログラム開発でいいということになりそう。
Table of Contents
シリーズ一覧
- OutSystemsのREST API作成機能を試してみました
- OutSystemsのREST API作成機能(2) CREATE(1レコード)
- OutSystemsのREST API作成機能(3) APIドキュメント(自動作成)
公式情報
今回もほぼそのままのサンプルがありましたので、基本はこっちを参照。
認証の設定
更新系機能をテストするので、一応認証を行います。Basic認証ですが。
動作環境でhttps://<ホスト>/Usersにアクセスして認証ユーザを適当に作っておきます。
作成したAPI(Customers)のプロパティから「Authentication」をBasicに設定。なおSSLはデフォルトで有効な様子。
Basic認証なので、<ユーザ名>:<パスワード>をBase64エンコードして、
「Authorization: Basic <エンコード結果>」という文字列を用意しておく。
CREATE API作成
作成したAPI(Customers)を右クリックして、Add REST API Methodから「CreateCustomer」を作成。
CREATEなのでHTTP MethodをPOSTに。
入力パラメータはCustomerオブジェクト、出力パラメータは作成したCustomerのId(Customer Identifier)とします。シンプルに受け取ったCustomerオブジェクトをそのままEntityに追加してそのIdを返すロジックです。
動作確認
パブリッシュして、FiddlerのComposerを使ってHTTP POSTのリクエストを組み立てて動作確認。
ヘッダに「Content-Type: application/json」を忘れるとこんなエラーが出ます。
{ "Errors":["The request contains an entity body but no Content-Type header. The inferred media type 'application/octet-stream' is not supported for this resource."], "StatusCode":415 }
上のエラー処理のページに書いてあるように、リクエストのチェックでエラーが出ると、エラーメッセージとHTTP Statusがレスポンスボディに返ってくる。レスポンスヘッダのステータスも同じのが返ってくるので利用する法でチェックすればいいでしょう。
うまくいくと、レスポンスボディにはCustomerIdの数字だけが戻ってくる。
リクエスト例:
{ "Name":"REST追加顧客", "Address":"住所111", "Tel":"00-0000-0000", "Lat":35.100000000000000000000000000, "Lon":135.60000000000000000000000000, "History":"RESTから追加されました" }
入力チェックの追加
EntityのName AttributeにはIsMandatoryをYES(つまり必須)に設定しているのですが、リクエストボデイの指定からName属性を外しても追加できてしまいます。OutSystemsでは主キー以外にはDBの制約がつかないらしいので、入力チェックを追加しました。
Start直後の分岐で入力のName属性をチェックして有効な入力がなければ、Raise Errorで「AttributeMandatoryException」というUser Exceptionを投げています。この例外は自分でLogic→Exceptions→All Exceptions→User Exceptionから追加しました。
もう一度パブリッシュしてNameを指定せずにリクエスト。User Exceptionを投げるとHTTP Statusは500です。
{ "Errors":["必要な属性が未指定です。"], "StatusCode":500 }