C#でIEYASU APIを使う
クラウド勤怠管理のHARMOS勤怠(旧称:IEYASU)にはRESTのAPIが用意されています。
今回、顧客案件でこの IEYASU API をC#から扱う機会があったので、そのメモです。
HttpClientを使ってもできると思いますが、今回はRestSharpを使いました。
開発環境は Visual Studio 2019です。
準備
まずは、API KEYを管理用WEB画面で取得しておきます。
尚、API KEYの有効期限は3か月です。更新忘れがないように注意が必要です。
次にVisual Studioに移動し、NuGetを使ってRestSharpをインストールします。
あと、Jsonを扱うのでシリアライズを使うとスマートです。以下のようにコード内でusingディレクティブを追加しておきます。
using RestSharp;
using System.Text.Json;
GET
ユーザー一覧や打刻データの POST や GETにはTokenが必要になりますので、ここでは認証用Tokenの取得をやってみます。AddHeaderメソッドを使い、さきほど発行しておいた API KEY をHeaderに埋め込めばOKです。
string url = "https://ieyasu.co/api/<company_code>/v1";
RestClient client = new RestClient(url);
string api = "/authentication/token";
RestRequest request = new RestRequest(api);
request.AddHeader("Authorization", "Basic <api key>"); //APIキーでBasic認証
request.Method = Method.Get;
RestResponse response = await client.GetAsync(request);
MessageBox.Show(response.Content);
これでTokenが含まれたJsonを取得できます。
尚、<company_code>の部分はハーモス勤怠の契約時にもらった会社コードに置き換えます。
POST
ここではPOSTの簡単な例として打刻登録を扱います。
打刻の仕様は https://ieyasu.co/docs/api.html#/paths/~1stamp_logs/post に記載されていますが、
user_id と stamp_type が必須項目です。 stamp_type は 出勤の場合が1で、退勤が2です。
ここではuserをつかさどるUserDataクラスを作ります。
class UserData
{
[JsonPropertyName("user_id")] public int UserID { get; set; }
[JsonPropertyName("stamp_type")] public int StampType { get; set; }
}
user_id も stamp_type も ingeger型です。
UserDataのインスタンスを作成するときは以下のようになります。
このコードで jsonStr には {“user_id”:5,”stamp_type”:1} が入ります。
UserData user = new UserData();
user.UserID = 5; //user_id
user.StampType = 1; //出勤
string jsonStr = JsonSerializer.Serialize(user);
あとはRestSharpを使ってPOSTを実行します。TokenはAddHeaderメソッドを使い、Headerとして追加しておきます。
string url = "https://ieyasu.co/api/<company_code>/v1";
RestClient client = new RestClient(url);
string api = "/stamp_logs";
RestRequest req = new RestRequest(api);
req.AddHeader("Authorization", "Token <token>"); //<token>はBasic認証で取得しておく
req.AddJsonBody(jsonStr); //Jsonの文字列はAddJsonBodyに放り込む
req.Method = Method.Post;
RestResponse response = await client.PostAsync(req);
これでスマホで出勤ボタンをタッチしたのと同じ効果が得られます。
以上です。