イントロ
独自のカスタマイズやその他の目的でRESTfulAPIとしてBioStar2 New Local APIを使用する場合は、この記事を参照してください。この記事では、C#コンソールアプリケーションによるBioStar 2 New Local APIの基本的な使用法について説明します。
BioStar 2 New Local APIのSwaggerには、次のURLからアクセスできます:https://{BioStar2 IP}/swagger/index.html#/
* BioStar2 New Local APIはBioStar2.7.10以降でサポートします。
機能
この記事では、以下の機能について説明します。
この記事では、API関数を呼び出してBioStar2サーバーにログインする方法を確認します。BioStar 2のユーザーIDとパスワードを入力し、他のAPI呼び出しを使用するための認証を簡単に取得できます。ログインに成功した後は、「bs-session-id」の管理方法に注意してください。
API呼び出し用に作成されたC#プログラムのサンプルコードをご覧ください。ソースコードをコピーして貼り付けて同じ機能を使用できます。
また、RESTfulAPI呼び出しに使用するプログラムであるPostmanを介してAPI関数を呼び出す方法も確認します。
Part 1. API呼び出しとパラメーター
[POST]: /login
[パラメーター]
グループ | 名称 | タイプ | *M/O | 詳細 | バリュー |
User | login_id | string | M | ログインID |
|
| password | string | M | パスワードd |
|
* M – 必須, O – オプション
Part 2. リクエストボディとレスポンスモデル
[例バリュー/パラメーターモデル]
{ "User": { "login_id": "admin", "password": "qwer1234" } } |
[レスポンスモデル]
{ User Res____User____272{ user_id string example: 1 desc: User ID
name string example: Administrator desc: Name
gender string example: 1 @desc: User Gender
birthday string example: 1977-10-08T04:00:00.00Z @desc: User Birthday
photo_exists boolean example: false desc: Check Photo
pin_exists boolean example: false desc: Check PIN
login_id string example: admin desc: Login ID
password_exists boolean example: true desc: Check Password
updated_count string example: 0 desc: Update Count
last_modified string example: 0 desc: Last Modify
start_datetime string example: 2001-01-01T00:00:00.00Z desc: Start DateTime
expiry_datetime string example: 2030-12-31T23:59:00.00Z desc: Expiry DateTime
security_level string example: 0 desc: Security Level ~ } { Response Res____Response{ code string example: 1003 desc : Response.code reference: C:\Program Files\BioStar 2(x64)\nginx\html\resources\messages_en.properties(ACB_ERROR_CODE.XXXXX)
link string example: https://support.supremainc.com/en/support/home desc: Link URL
message string example: Success desc: Message
} httpResponseStatus Res____httpResponseStatusinteger example: 200 desc: HTTP Status Code }
|
[レスポンス: エラー]
{ "Response": { "code": "101", "link": "https://support.supremainc.com/en/support/home", "message": "Failed to login for invalid username or password" } } |
[レスポンス: 成功]
{ "User": { "user_id": "1", "name": "Administrator", "gender": "0", "photo_exists": "false", "pin_exists": "false", "login_id": "admin", "password_exists": "true", "updated_count": "37", "last_modified": "63", "idx_last_modified": "24", "start_datetime": "2001-01-01T00:00:00.00Z", "expiry_datetime": "2030-12-31T23:59:00.00Z", "security_level": "0", ~ }, "Response": { "code": "0", "link": "https://support.supremainc.com/en/support/home", "message": "Success" } } |
Part 3. コンソールログインの例
[ログインソースコード]
static async void LoginTask() { string resourceAddress = "https://127.0.0.1:443/api/login"; //Enter your BioStar 2 address & the API call you’d like to perform(login in this case)
HttpClient httpClient = new HttpClient();
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, string> dicLoginUser = new Dictionary<string, string>();
dicLoginUser.Add("login_id", "admin"); // Enter BioStar 2 Admin Login ID dicLoginUser.Add("password", "adminPassword"); // Enter your password of BioStar 2 Admin Dictionary<string, object> dicLogin = new Dictionary<string, object>(); dicLogin.Add("User", dicLoginUser); // Save your ID and PW to a parameter named “User” and add it to dicLogin
string jsonLoginUser = serializer.Serialize(dicLogin);
StringContent sc = new StringContent(jsonLoginUser, Encoding.UTF8, "application/json");
// To load HTTPS Certificate ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
//This is an example line to allow the certificate check is secure. You can have your own line for better secure of your application. //Please search stackoverflow for the error description - The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. //A common reason you may receive the error above Could not establish trust relationship for the SSL/TLS secure channel is because the SSL certificate isn't trusted. //Below code ignore the untrusted cert errors. System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; //HttpResponseMessage httpResponse = await httpClient.PostAsync(resourceAddress, sc); HttpResponseMessage httpResponse = httpClient.PostAsync(resourceAddress, sc).Result;
if (httpResponse.IsSuccessStatusCode == true) { Console.WriteLine(httpResponse.ToString()); string httpResponseBody = await httpResponse.Content.ReadAsStringAsync(); //Console.WriteLine(httpResponseBody); Console.WriteLine("Login successful...");
MemoryStream responseMemoryStream = new MemoryStream(); StreamWriter sw = new StreamWriter(responseMemoryStream); sw.Write(httpResponse.ToString()); sw.Flush();
bool isSessionIDContained = httpResponse.Headers.Contains("bs-session-id"); if (isSessionIDContained == true) { IEnumerable<string> sessionEnum = httpResponse.Headers.GetValues("bs-session-id");
foreach (string element in sessionEnum) { Console.WriteLine("bs-session-id: " + element); sessionID = element; } } else if (isSessionIDContained != false) { Console.WriteLine("Session ID not found"); } } else { Console.WriteLine("Failed to log in"); Console.WriteLine(httpResponse.ToString()); } } |
|
[正常にログインした後]
Part 3. Postman経由でログイン
[リクエスト例]
[レスポンス例:body]
[レスポンス例: Headers]
*Postmanによる他のAPI呼び出しには、「be-session-id」値を使用してください。する必要があります。