1 Visual Studioでクラスライブラリのプロジェクトを作成します。
ターゲットフレームワークは「.NET Framework 4.6」に設定します。ターゲットフレームワークに「.NET Framework 4.6」を選択できるVisual Studioであれば、使用するVisual Studioはどのバージョンでも構いません。
2 Forguncyのインストールフォルダに含まれる以下の2つのDLLファイルを参照設定に追加します。
●C:\Program Files(x86)\Forguncy\Website\bin\GrapeCity.Forguncy.ServerApi.dll
●C:\Program Files (x86)\Forguncy\Website\bin\Microsoft.Owin.dll
3 GrapeCity.Forguncy.ServerApi 名前空間にあるForguncyApi クラスを継承したクラスを作成します。
クライアントからのリクエストを受けて処理を行う場合、このクラスの中にGET用とPOST用のメソッドを定義します。メソッド名には任意の名前を付けることができますが、GrapeCity.Forguncy.ServerApi名前空間にある[Get]と[Post]という属性をそれらのメソッドに付加します。作成したメソッド内に、ForguncyのサーバーサイドAPIを使用してForguncyの内部データベースへアクセスする処理等を記述します。
定期実行を行う場合、このクラスの中にメソッドを定義します。メソッド名には任意の名前を付けることができますが、GrapeCity.Forguncy.ServerApi名前空間にある[ScheduleApi]という属性をそれらのメソッドに付加します。
4 Visual Studioでビルドを行いDLLファイルを作成します。
5 Forguncy Builderを起動し、[ファイル]→[オプション]→[カスタムWeb API]を選択し、[Web API DLLファイルのアップロード]を押して作成したDLLファイルを選択します。
作成したDLLファイルに問題がなければ、下の図のように使用できるWeb APIの一覧が表示されます。
Forguncyのサーバーサイドで提供するAPIは、データベースのテーブルデータの取得、更新、追加、削除の4つとメール送信です。
データベースへのアクセスに使用するメソッドはForguncyApi クラスのDataAccess プロパティを経由して使用します。詳細はIDataAccess インターフェイスを参照してください。
メール送信のためのメソッドはForguncyApi クラスのEmailSender プロパティを経由して使用します。詳細はIEmailSenderインターフェイスを参照してください。
GETメソッドやPOSTメソッドでリクエストを送信した場合、その内容はForguncyApi クラスのContext プロパティを使用して取得できます。このフィールドはMicrosoft.Owin 名前空間のIOwinContext 型となっているため、Request プロパティを使用してリクエストのBody等を取得できます。
IOwinContextインターフェイス (Microsoft.Owin)
http://[ドメイン名、またはホスト名]/[アプリケーションパス]/customeapi/[クラス名]/[メソッド名]
例:http://computer1/forguncyapp1/customapi/class1/addsampledata
定期実行の場合、クライアントからのリクエストによりメソッド内の処理が実行されるわけではないため、[ScheduleApi]属性を付加したメソッド内では、ForguncyApi クラスのContext プロパティは常にNullが返されます。
各メソッドを使用したサンプルコードについては、リファレンスのそれぞれのメソッドのページに記載されています。
以下のサンプルコードは、POSTメソッドで送信されてきた内容を、その時点の日付、IPアドレスと共に「SampleTable1」テーブルへ追加するものです。
public class Class1 : ForguncyApi { [Post] public void AddSampleData() { StreamReader reader = new StreamReader(this.Context.Request.Body); string message = reader.ReadToEnd(); Dictionary<string, object> values = new Dictionary<string, object>(); values.Add("date", DateTime.Now); values.Add("message", message); values.Add("ip", Context.Request.RemoteIpAddress); this.DataAccess.AddTableData("SampleTable1", values); } }