Dabory ERP의 모든 API는 단순성과 보안성을 지향하므로 모든 API REST 'POST' 만 사용한다.
{
"ClientId": "855636142382-PPJLtr9Nv6", // Client Id from DaborySSO
"BeforeBase64": "FHMpL8A/WGPqZn+dv29mPY0hRk3C9SVZ5kfZi01g80Cib+ogu27EIjk5vAyK9PgJi/N1U0fO6qkhPaMb8YSyyLuUUsrM2AjYA4j4xf8FyY8ZMc0rqkBI55RfQl6EFVThfj0a48lf6v1S3sA3TdCzGorV0Js7IuhlrhU3eP7qrTGAz0BYh7u4gEp4VBrk3g9Ep1X+x7GA/yLGBg/Sw0qw7qqkfUVuV/lLxdbL1WKOfA1wmOv8Jxq8tRT0sRti2LlE6JuMF6Jq86gnuGLDGrNk", // Encryped Info
}
B. Response Json {GateToken string}
B.1. example: {"GateToken":"C12xyir30STeqLDHaPhM"}
즉 하나의 API Instance 가 다수개의 Frontend 에 대한 Request 를 동시에 처리하며 해당 Frontend 의 Request 에 대해 각각 다른 DB로 접근이 가능하도록 되어 있다. That is, many API clients access only one API server and the Server API has a gateway for accessing each of DB connecting for many clients.
따라서 (1) Frontend 은 최초에 사용 DB에 대한 접속 config를 암호화해서 보내주면 Once API client encrypts DB connection info and send it to API server.
(2) Backend는 해당 정보를 복호화해서 서버에 저장하면서 해당 정보 주소를 GateToken 으로 보내주고 API server(Backend) decrypts and save the info it in memory DB of API server while sending back the address of memory DB (GateToken)
(3) 그 이후 부터는 모든 Request에 GateToken을 포함시켜 보내면 the frontend client includes GateToken in API Header everytime when it requests service to backend.
(4) Backend는 해당 DB 에 대해 자동 처리할 수 있게 한 JWT 구조를 사용한다. backend fetch client DB connection info from memory DB which enable for backend to access to client DB. (similar like JWT)
ClientId and PublicKey are from Dabory SSO published and they are saved in config/app.php
(1) 제공된 PrivateKey 와 DB 접속정보를 이용하여 암호한 정보를 Base64로 Encoding 한 정보를 BeforeBase64 에 넣는다.
Provided ClientId and PublicKey are supposed to be encrypted by "Sodium of PHP" and ended into Base64 to send to API server.
!! Caution : GateToken has valid period and API client should have functions to auto-check and re-create Gate Token if it lost connection. (2) PHP code 예제
$msg = '{
"Driver":"mysql",
"Host":"13.124.2.254",
"Port": 3306,
"Username":"weberp_db",
"Database":"weberp_db",
"Password":"xxxxxxxxx"
}';
$before_base64 = base64_encode(sodium_crypto_box_seal($msg, $publicKey));
(3) detail sequence Diagram :