サーバー設定
4D の RESTサーバーは、標準の HTTPリクエストを用いて外部アプリケーションがアプリケーションのデータにアクセスすることを可能にします。つまり、プロジェクトのデータクラス情報を取得したり、データを操作したり、Webアプリケーションにログインしたり、といったことが可能です。
REST機能を使い始めるまえに、まずは 4D REST サーバーの設定をおこない、これを起動させる必要があります。
RESTサーバーを開始する
セキュリティ上の理由により、デフォルトでは、4D は RESTリクエストに応答しません。 RESTサーバーを開始し、RESTリクエストを処理するには、ストラクチャー設定 の Web > Web機能 ページにて、RESTサーバーとして公開 オプションを有効化する必要があります。
RESTサービスは 4D の HTTPサーバーを使用するため、4D Webサーバーが開始されていることを確認してください。
このオプションが有効化されると、「警告: アクセス権が正しく設定されているか確認してください。」という警告メッセージが表示されます。これは REST接続の認証設定がされていない限り、デフォルトではデータベースオブジェクトに自由にアクセスできてしまうためです。
変更を反映するには、4Dアプリケーションを再起動する必要があります。
RESTアクセスの制御
デフォルトでは、REST接続はすべてのユーザーに対してオープンですが、この状態はライセンス管理上もセキュリティ上も推奨されません。
4D 20 R6 以降、強制ログイン モード を有効化し、ユーザーを認証し、そのWeb セッションに権限を割り当てるためのauthentify()
関数を作成することでREST アクセスを設定します。
設定ダイアログボックス内のアクセス エリアは、互換性のために、変換されたプロジェクト内でのみ利用可能です。 詳細な情報についてはアクセス を参照してください。
テーブルやフィールドの公開
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リソースとして公開 オプションの選択を解除します:
Repeat this for each field whose exposure needs to be modified.
あるフィールドが REST を通してアクセス可能であるためには、その親テーブルも公開されている必要があります。 親テーブルが公開されていない場合、各フィールドの公開設定に関わらず、すべてのフィールドがアクセス不可になります。
プリエンプティブモード
4D Server上では、インタプリタモードであっても、RESTリクエストは自動的にプリエンプティブプロセスで処理されます。 そのため、コードは プリエンプティブ実行に準拠 している必要があります。
インタープリター版のWeb コードをサーバーマシン側でデバッグするためには、デバッガがサーバー側で有効化されている かあるいは リモートマシン側で有効化されている ことを確認してください。 これにより、Webプロセスがコオペラティブモードに切り替わり、Webサーバーコードのデバッグが可能になります。
シングルユーザーの 4D では、インタープリターコードは常にコオペラティブモードで実行されます。