サーバー設定
4D の RESTサーバーは、標準の HTTPリクエストを用いて外部アプリケーションがアプリケーションのデータにアクセスすることを可能にします。つまり、プロジェクトのデータクラス情報を取得したり、データを操作したり、Webアプリケーションにログインしたり、といったことが可能です。
REST機能を使い始めるまえに、まずは 4D REST サーバーの設定をおこない、これを起動させる必要があります。
- 4D Server上では、開かれる RESTセッションにつき、4D Client ライセンスが1消費されます。
- シングルユーザーの 4D では、テスト目的で RESTセッションを 3つまで開くことができます。
- リクエストをおこなうアプリケーションの セッション は別途管理する必要があります。
RESTサーバーを開始する
セキュリティ上の理由により、デフォルトでは、4D は RESTリクエストに応答しません。 RESTサーバーを開始し、RESTリクエストを処理するには、ストラクチャー設定 の Web > Web機能 ページにて、RESTサーバーとして公開 オプションを有効化する必要があります。
RESTサービスは 4D の HTTPサーバーを使用するため、4D Webサーバーが開始されていることを確認してください。
このオプションが有効化されると、「警告: アクセス権が正しく設定されているか確認してください。」という警告メッセージが表示されます。これは REST接続の認証設定がされていない限り、デフォルトではデータベースオブジェクトに自由にアクセスできてしまうためです。
変更を反映するには、4Dアプリケーションを再起動する必要があります。
アクセス権の設定
デフォルトでは、REST接続はすべてのユーザーに対してオープンですが、この状態はライセンス管理上もセキュリティ上も推奨されません。
REST接続は次の方法で制限することができます:
- ストラクチャー設定の "Web > Web機能" ページにて、RESTサービスに割り当てる 読み込み/書き出し ユーザーグループを設定します;
On REST Authentication
データベースメソッドに、RESTの初期リクエストを処理するコードを書きます。
上に挙げた 2つの方法を同時に使用することはできません。
On REST Authentication
データベースメソッドを定義した場合、4D は RESTリクエストの処理を同メソッドに委ねます。つまり、ストラクチャー設定の "Web > Web機能" ページにて指定した "読み込み/書き出し" の設定は無視されます。
ストラクチャー設定を使用する
ストラクチャー設定の "Web > Web機能" ページにある 読み込み/書き出し 設定は、RESTクエリを使って 4Dアプリケーションへのリンクを設立することのできる 4Dユーザーのグループを指定します。
デフォルトでは、メニューには <Anyone>
が選択されています。 これは、REST接続はすべてのユーザーに対してオープンであるという状態を示しています。 グループを指定すると、そのグループに所属する 4Dユーザーアカウントのみが RESTリクエストを通して 4D にアクセス できるようになります。 このグループに所属していないアカウントの場合、4D はリクエストの送信者に対して認証エラーを返します。
この設定を使用するには、
On REST Authentication
データベースメソッドを定義してはいけません。 これが定義されている場合は、ストラクチャー設定にて指定したアクセス設定は無視されます。
On REST Authentication データベースメソッドを使用する
On REST Authentication
データベースメソッド は 4D 上で RESTセッションの開始を管理するための方法を提供します。 RESTリクエストによって新規セッションが開始される際、このデータベースメソッドは自動的に呼び出されます。 RESTセッション開始のリクエスト を受信すると、そのリクエストヘッダーには接続の識別子が含まれています。 これらの識別子を評価するために On REST Authentication
データベースメソッドは呼び出されます。 評価にあたっては、4Dアプリケーションのユーザーリストを使用することもできますし、独自の識別子のテーブルを使用することもできます。 詳細については On REST Authentication
データベースメソッドの ドキュメンテーション を参照ください。
テーブルやフィールドの公開
4Dアプリケーションの RESTサービスが有効化されると、データストアインターフェース を通して 4Dデータベースのすべてのテーブルとフィールドおよび格納データが RESTセッションによってデフォルトでアクセス可能です。 つまり、すべてのデータにアクセス可能ということです。 たとえば、データベースに [Employee] テーブルが含まれている場合、次のように書くことができます:
http://127.0.0.1:8044/rest/Employee/?$filter="salary>10000"
このリクエストで、salary (給与) フィールドが 10000以上の社員データが取得されます。
"非表示" 属性を選択されたテーブルやフィールドも、デフォルトで REST に公開されています。
REST 経由でアクセス可能なデータストアオブジェクトを制限するには、アクセス不可にするテーブルやフィールドについて "RESTリソースとして公開" オプションを選択解除する必要があります。 許可されていないリソースへの RESTリクエストがあった場合、4Dはエラーを返します。
テーブルの公開
デフォルトでは、すべてのテーブルが REST に公開されています。
セキュリティ上の理由から、データベースの一部のテーブルのみを公開したい状況もあるでしょう。 たとえば、[Users] テーブルを作成し、その中にユーザー名とパスワードが保存されている場合、そのテーブルは公開しない方が賢明でしょう。
テーブルを公開したくない場合は:
-
ストラクチャーエディターにて対象となるテーブルを選択し、右クリックでコンテキストメニューを開いてテーブルプロパティを選択します。
-
RESTリソースとして公開 オプションの選択を解除します: 公開設定を変更する各テーブルに対して、この手順を繰り返します。
フィールドの公開
デフォルトでは、すべての 4Dデータベースフィールドが REST に公開されています。
テーブルの一部のフィールドのみを非公開にしたい状況もあるでしょう。 たとえば、[Employees]Salary のようなフィールドは非公開の方がよいでしょう。
フィールドを非公開にするには:
-
ストラクチャーエディターにて対象となるフィールドを選択し、右クリックでコンテキストメニューを開いてフィールドプロパティを選択します。
-
フィールドの RESTリソースとして公開 オプションの選択を解除します: 公開設定を変更する各フィールドに対してこの手順を繰り返します。
あるフィールドが REST を通してアクセス可能であるためには、その親テーブルも公開されている必要があります。 親テーブルが公開されていない場合、各フィールドの公開設定に関わらず、すべてのフィールドがアクセス不可になります。