Forguncy 10 オンラインヘルプ
アプリの拡張 / コーディングによるカスタマイズ / カスタムWeb API / カスタムWeb API DLLファイルの作成
このトピックで
    カスタムWeb API DLLファイルの作成
    このトピックで

    本記事に記載しているカスタムWeb APIの各クラスの詳細については、リファレンスヘルプ「Forguncy ServerApi(カスタムWeb API)」を参照してください。

    1. Visual Studioでクラスライブラリのプロジェクトを作成します。

      フレームワークは「.NET 8」に設定します。ターゲットフレームワークに「.NET 8」を選択できるVisual Studioであれば、使用するVisual Studioはどのバージョンでも構いません。ただし、必ず.NET StandardのAPIセットのみを使用するようにしてください。.NET Standardに含まれるAPIであるかどうかについては、マイクロソフト社のドキュメントを確認してください。

    2. Forguncy Builderのインストールフォルダに含まれる以下のDLLファイルを参照設定に追加します。

      <Forguncy Builderのインストールフォルダー>¥Website¥bin¥GrapeCity.Forguncy.ServerApi.dll

    3. プロジェクトを開き、FrameworkReferenceを直接追加します。

      コードのコピー
      <ItemGroup>
              <FrameworkReference Include="Microsoft.AspNetCore.App" />
      </ItemGroup>

    4. GrapeCity.Forguncy.ServerApi 名前空間にあるForguncyApi クラスを継承したクラスを作成します。

      クライアントからのリクエストを受けて処理を行う場合、このクラスの中にGET用とPOST用のメソッドを定義します。メソッドには任意の名前を付けることができますが、GrapeCity.Forguncy.ServerApi名前空間にある[Get]と[Post]という属性をそれらのメソッドに付加します。作成したメソッド内に、ForguncyのサーバーサイドAPIを使用してForguncyの内部データベースへアクセスする処理等を記述します。

      定期実行を行う場合、このクラスの中にメソッドを定義します。メソッドには任意の名前を付けることができますが、GrapeCity.Forguncy.ServerApi名前空間にある[ScheduleApi]という属性をそれらのメソッドに付加します。

    5. Visual Studioでビルドを行いDLLファイルを作成します。

    6. Forguncy Builderを起動し、[ファイル]リボンタブ - [オプション] - [カスタムWeb API]を選択し、[Web API DLLファイルのアップロード]を押して作成したDLLファイルを選択します。

      「GrapeCity.Forguncy.ServerApi.dll」をアップロードする必要ありませんが、そのほかにライブラリDLLファイルの参照を追加している場合には、それらのファイルもアップロードする必要があります。

      作成したDLLファイルに問題がなく、必要参照ファイルがアップロードされていれば、次の図のように使用できるWeb APIの一覧が表示されます。

    ForguncyサーバーサイドAPI

    Forguncyのサーバーサイドで提供するAPIは、データベースへのアクセス(テーブルデータの取得や更新など)、メール送信、定期実行、ユーザーアカウント情報の管理に関するものです。

    データベースへのアクセスに使用するメソッドはForguncyApiクラスのDataAccessプロパティを経由して使用します。詳細はリファレンスヘルプのIDataAccessインターフェイスを参照してください。

    メール送信のためのメソッドはForguncyApiクラスのEmailSenderプロパティを経由して使用します。詳細はリファレンスヘルプのIEmailSenderインターフェイスを参照してください。

    ユーザーアカウント情報の管理のためのメソッドはForguncyApiクラスのUserInfosプロパティを経由して使用します。詳細はリファレンスヘルプのIUserInfosインタフェースを参照してください。

    リクエスト内容の取得

    GETメソッドやPOSTメソッドでリクエストを送信した場合、その内容はForguncyApiクラスのContextプロパティを使用して取得できます。ContextプロパティはMicrosoft.AspNetCore.Http名前空間のHttpContextクラスとなっており、RequestプロパティでHTTPリクエストのすべての情報を取得できます。

    HttpContext クラス (Microsoft.AspNetCore.Http)

    呼び出すAPIのURL

    http://[ベースURL]/customapi/[クラス名]/[メソッド名]

    Forguncy Serverに発行されたアプリケーションの場合

    ベースURL:[ドメイン名、またはホスト名]/[アプリケーション名]

    例:http://computer1/forguncyapp1/customapi/class1/addsampledata

    Forguncy Builderにおけるデバッグ実行の場合

    ベースURL:[localhost:*****]

    例:http://localhost:41264/customapi/class1/addsampledata

    定期実行

    定期実行の場合、クライアントからのリクエストによりメソッド内の処理が実行されるわけではないため、[ScheduleApi]属性を付加したメソッド内では、ForguncyApiクラスのContextプロパティは常にNullが返されます。

    レスポンスの設定

    Forguncy Serverでは、ASP.NET Coreフレームワークを使用しているため、ASP.NET Coreに基づく内容はForguncyにも適用されます。

    Get、およびPostで別のレスポンス(200以外のHTTPステータス)を返したい場合、Microsoft.AspNetCore.HttpのHttpResponse.StatusCode属性で設定します。

    サンプルコード:HTTP Status(例では404)のステータスコードを返しています。

    this.Context.Response.StatusCode = 404;

    GetおよびPostで本文を返したい場合、HttpResponse.WriteAysncメソッドを使用して本文を書き込むことができます。WriteAsyncを使用する前に、「Microsoft.AspNetCore.Http」を参照する必要があることに注意してください。

    応答本文の書き込みのコード例

    this.Context.Response.ContentType = "text/html";

    this.Context.Response.WriteAsync("<h> Hello Forguncy </h> <p> Hello Test Api </p>").Wait();

    サンプルコード

    各メソッドを使用したサンプルコードについては、リファレンスのそれぞれのメソッドのページに記載されています。

    以下のサンプルコードは、POSTメソッドで送信されてきた内容を、その時点の日付と共に「サンプルテーブル1」テーブルへ追加するものです。

    コードのコピー
    public class Class1 : ForguncyApi
    {
        [Post]
        public async Task AddSampleData()
        {
            string message = await new StreamReader(base.Context.Request.Body).ReadToEndAsync();
    
            Dictionary<string, object> values = new Dictionary<string, object>();
    
            values.Add("日時", DateTime.Now);
            values.Add("メッセージ", message);
    
            this.DataAccess.AddTableData("サンプルテーブル1", values);
        }
    }

    以下は、定期実行の処理を記述するサンプルコードです。

    コードのコピー
    // 毎日午前0時にこのメソッドが実行されます。
    [ScheduleApi("0:0:0","1")]
    public void SampleScheduleApi1()
    {
         // ここに処理を記述します。 
    }
    
    // 1時間ごとにこのメソッドが実行されます。
    [ScheduleApi("1:0:0")]
    public void SampleScheduleApi2()
    {
         // ここに処理を記述します。
    }