2장. Restfull API 구성
다보리 Gate Token 개념
-
다보리 Gate Token이란?
SSO에 가입한 사용자는 로그인후 접속정보를 통해 ClientId와 PublicKey를 발급받습니다. 최초에 작성된 sodium key pair는 sso 서버에 저장됩니다.
(Front-end) - - - - > {Client Id, BA64 Key} - - - - > (Back-end)
gateToken 생성
(Back-end) - - - - > {gate token} - - - - > (Front-end)
Front-end에서 최초 발급된 ClientId와 사용자의 db 접속정보가 암호화된 BA64 Key를 Back-end로 전송하면 Back-end에서 Gate Token을 생성하여 반환하면 Front-End에서 session에 토큰을 저장하여 사용할 수 있습니다. 이 Gate Token을 통해 사용자를 검증하고 세션을 유지시켜줍니다. 또한 Gate token을 발급받은 사용자는 한번의 로그인으로 다수의 API 서버와 연동할 수 있습니다.
[Gate Token 순서도]
https://manual.dabory.com/books/frontend-tutorial/page/envdabory-gate-token
다보리 API 설계의 기본 지식
HTTP Method 및 보안성:
- 다보리 ERP의 모든 API는 단순성과 보안성을 고려하여 POST method만 사용합니다.
- 이는 데이터 변경 및 전송의 안정성을 보장할 수 있습니다.
DaborySSO 및 환경 변수:
- DaborySSO를 사용하여 API 서버에 인증 및 권한 관리를 권장하지만 필요에 따라 Key Pair를 API 서버의 환경 변수에 저장하여 SSO 서버와 독립적으로 사용할 수 있습니다.
GateToken:
- 모든 API 요청은 API 서버로부터 반환받은 GateToken을 포함해야 합니다. 이를 통해 인증 및 권한 부여가 이루어집니다.
- GateToken은 타켓 DB의 접근 정보를 PKI 암호화한 BeforeBase64 Key로만 발급받을 수 있습니다. 이는 데이터 보안을 강화합니다.
- 모든 Frontend Server는 ClientID 값을 가집니다. 이는 DaborySSO에서 App 레코드를 생성하는 과정에서 생성됩니다.
- Client(Frontend)의 GateToken은 API 서버의 메모리 DB에 저장됩니다. 또한 유효기간 설정이 가능합니다. 이를 통해 인증된 클라이언트만이 API를 사용할 수 있도록 합니다.
이러한 설계 원칙을 준수하여 안전하고 효율적인 API 시스템을 구축할 수 있습니다.
PAP(pick-act-page) API 설명
PAP(pick-act-page) API란?
PAP(pick-act-page) API는 다보리 컴포저블 앱에서 개별 Table 단위의 데이터 처리를 위한 API 구조를 정의하는 방법입니다. 이 API 구조는 데이터의 추출(Pick), 실행(Action), 그리고 페이지네이션(Page) 세 가지 api를 포함하고 있습니다.
- Pick api (데이터 추출)
- 개별 ID 값을 기반으로 한 개 또는 다수의 레코드를 추출합니다.
- Act api (데이터 실행)
- Insert, Update, Delete와 같은 데이터 작업을 수행합니다.
- ID 값에 따라 Insert(0), Update(양수), Delete(음수)로 구분합니다.
- 만약 ID값이 0보다 큰 양수라면 해당 ID값에 해당하는 데이터를 Update합니다.
- Delete는 다른 필드 없이 ID 값만으로 처리할 수 있습니다.
- Page api(페이지네이션)
- 하나의 Select 쿼리로 테이블의 레코드를 2차원 리스트 형태로 가져옵니다.
- QueryCnt, Query, Fields, Asc, Desc, Limit, Offset, ReturnJson 등의 파라미터를 통해 페이징과 필터링을 설정합니다.
- 특히 ReturnJson 필드는 페이지 갱신 시 이전 쿼리 조건값을 잃지 않도록 서버에 전달하고, Base64 인코딩을 통해 전달합니다.
*API 공용 Json Structure 정의
"PageVars": {
"QueryCnt": "string",//Response 시에만 유효한 값, Where 절에 걸리는 Row Count - Request 시에는 지정하지 않아도 됩니다.
"Query": "string",//Query의 Where Clause의 내용과 같은 문법으로 지정 가능합니다. (And / Or 조건 지정 가능)
"Fields": "string",// 가져올 필드를 지정합니다, 필드 자체를 뺄 수는 없지만, 해당값을 Empty 처리가 가능합니다. (지정하지 않으면 all)
"Asc": "string",// ORDER BY *** ASC 지정 가능합니다.
"Desc": "int",// ORDER BY *** DESC 지정 가능합니다.
"Limit": "int",// 한번 페이징에서 가져오는 Row 갯수, 반드시 지정필요, 10개 Default
"Offset": "int",// Where로 필터된 rows 중 가져오는 첫번째 레코드 레코드 옵셋 지정 가능
"ReturnJson": "string",//일반적으로 필터링 하는 지정 조건 값을 서버로 보냈다가 받을 수 있습니다.
}