プログラミング教室
ストリーミングと料金を連動管理 (クレジットカードの設定をしないと無料にならない ※二段階認証の導入)
ユーザインターフェース (スタートアップを手動管理 スタートアップアプリの設定は手動でOFFにする)
※二段階認証の導入 金銭操作時に本人確認を要求、メール等で二段階認証する
Androidアプリをそのままに、従来のAPIを使用し、JSONを導入する。
旧API: /login.php ↓(そのまま受信)、 新API: /v2/auth/login(変換)
if (旧機能) → 旧システム 、if (新機能) → SaaS
(従来)Android → PHP/ASP → DB
(SaaS化)Android → API Gateway → SaaS/Microservices → DB/クラウド
- .js / .ts
- .py
- .yaml(API定義)
二段階認証付きログインUI(メール認証、SMS)を同期するAPI Gatewayのサンプルコードを開発してみる
スレッドのインスタンスを同期オブジェクトで同期して、
1.「ログイン」サブミット
2.認証コード受信
3.二段階認証
4.UIのURL作成
5.Webページ画面遷移
1.から5.の順番にスレッドを動かす。
イメージとしては、
////////////////////////////////////////////////
//スレッド処理実装用のインターフェース
interface syncMethodInterface {
public synchronized void syncMethod();
}
////////////////////////////////////////////////
//スレッドインスタンスクラス
public class ObjectLockTest extends Thread implements syncMethodInterface {
//スレッドを同期するためのオブジェクトインスタンス
static Object 同期オブジェクト = new Object(); //スレッドのインスタンスはオブジェクトにはならない事に注意!(※1)
//main処理(javaコマンドでクラスファイル指定)
static public void main(String args[]){
LoginSubmitThread loginSubmit1 = new LoginSubmitThread();
loginSubmit1 .start(); 1.「ログイン」サブミット //スレッドのインスタンスはオブジェクトにはならない事に注意!(※1)
AuthcodeResponseThread authcodeResponse2 = new AuthcodeResponseThread ();
authcodeResponse2 .start(); 2.認証コード受信 //スレッドのインスタンスはオブジェクトにはならない事に注意!(※1)
以下同様にする。
3.二段階認証
4.UIのURL作成
5.Webページ画面遷移
}
public void run(){
this.syncMethod(同期オブジェクト );
}
//スレッドインスタンスで同期して処理されるメソッド
private synchronized void syncMethod(同期オブジェクト ){
synchronized(同期オブジェクト){
this.syncMethod();
}
//スレッド処理の実装はオーバーライドする
public synchronized void syncMethod(){
//nop 何もしていないから実装しないとダメ。
}
}
////////////////////////////////////////////////
public class LoginSubmitThread extends ObjectLockTest implements syncMethodInterface {
public synchronized void syncMethod(){
//1.「ログイン」サブミット を 実装 (ここから先はアプリケーションソフト毎のサンプルコード)
}
}
////////////////////////////////////////////////
AuthcodeResponseThread extends ObjectLockTest implements syncMethodInterface {
public synchronized void syncMethod(){
//2.認証コード受信 を 実装 (ここから先はアプリケーションソフト毎のサンプルコード)
}
}
(Copilot365検索)
JSONでデータベースを使う事を想定して開発したいので、JSONでテキストデータをデータベースに入出力する場合にシリアライズとデシリアライズするサンプルコードが欲しい。
(Copilot365回答)
いいですね、広一さん。
「JSONを入出力形式として使い、データはデータベースに保存する」
というのが現在のシステム開発では最も一般的な構成です。
流れとしては、
画面
↓
JSON
↓ シリアライズ
データベース
↓ デシリアライズ
JSON
↓
画面
になります。
(サンプル)
顧客情報をデータベースに保存する例です。
JSONデータ
{
"id": 1,
"name": "後藤広一",
"company": "株式会社後藤広一"
}
C# (.NET)
.NETはJSONとの相性が非常に良いです。
モデル
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public string Company { get; set; }
}
(シリアライズ)
オブジェクト → JSON
using System.Text.Json;
Customer customer = new Customer()
{
Id = 1,
Name = "後藤広一",
Company = "株式会社後藤広一"
};
string json =
JsonSerializer.Serialize(customer);
Console.WriteLine(json);
結果
{"Id":1,"Name":"後藤広一","Company":"株式会社後藤広一"}
(デシリアライズ)
JSON → オブジェクト
string json =
@"{
""Id"":1,
""Name"":""後藤広一"",
""Company"":""株式会社後藤広一""
}";
Customer customer =
JsonSerializer.Deserialize<Customer>(json);
Console.WriteLine(customer.Name);
(SQLiteへ保存)
小規模なシステムならSQLiteがおすすめです。
テーブル
CREATE TABLE Customers(
Id INTEGER PRIMARY KEY,
JsonData TEXT
);
(保存)
string json =
JsonSerializer.Serialize(customer);
string sql =
@"INSERT INTO Customers(JsonData)
VALUES(@json)";
(保存される内容)
+----+-----------------------------------+
- Id | JsonData |
+----+-----------------------------------+
- 1 | {"Id":1,"Name":"後藤広一"...} |
+----+-----------------------------------+
(読み出し)
string json = reader["JsonData"].ToString();
Customer customer =
JsonSerializer.Deserialize<Customer>(json);
広一さんの「AI利用PCキッティングサービス」のような小規模から始める事業なら、
SQLite + JSON列
SQLite
└ Customer
└ JsonData
から始めるのが一番低リスクだと思います。
将来 PostgreSQL や SQL Server に移行しやすく、AIとの連携もしやすい構成です。
