apiConfig는 실제 API 동작을 정의하는데 사용하며, configId
에 따라서 API Response 형태가 결정된다.
pid | valueType | description |
---|---|---|
id | INT | 자동 생성 아이디 |
targetId | PARENT | 상위 API |
configId | STRING | 동일 API에 여러개의 apiConfig가 설정되는 경우 API 응답 명칭을 의미, ROOT로 설정하는 경우 응답의 최상위에 해당 apiConfig 결과가 Merge |
type | CODE | apiConfig의 유형 (query, event, select, relay, read, form… 등) |
tid | REFERENCE | API 유형이 NodeType이 필요한 경우(query, event,read,reads,form) 대상 Node Type |
resultType | CODE | 응답 형태(array, object, none, page) |
relayUrl | STRING | 중계할 API URL |
relayMethod | CODE | 중계 API 호출 메소드 (GET, POST...) |
datasource | REFERENCE | Select 일경우 사용할 데이터소스 |
sql | TEXT | Select 쿼리 SQL |
method | STRING | Method일 경우 실행할 메소드 service.method 형식 |
process | REFERENCE | Process 일 경우 실핼할 ProcesFlow 선택 |
cacheable | BOOLEAN | 캐시 사용 여부 |
cacheTime | INT | 캐시 시간(초) |
keepCache | BOOLEAN | 캐시 유지 여부 |
excludeCacheKey | STRING | 캐시키에서 제외할 파라미터 목록(예: timeStamp,userId) |
allowParams | BOOLEAN | 파라미터 쿼리에 대한 허용 여부 |
if | STRING | 해당 apiConfig에 대한 실행 여부 테스트(EL 사용) {{:equals(siteId, ‘dxp’)}} |
connectTimeout | INT | 대상 서비스의 커넥션 타임아웃 설정 ms (default : 5000) |
readTimeout | INT | 대상 서비스의 응답 타임아웃 설정 ms (default : 10000) |
customFilter | STRING | |
customResponse | STRING | 응답 결과에 대한 추가적인 처리가 필요한 경우 해당 서비스 정의 |
event | REFERENCE | |
failOver | CODE | 타임아웃이 발생하거나 500번대 에러가 발생하는 경우 이에 대한 처리 |
compensatingAPI | REFERENCE | failOver가 compensating일 경우 보상 API 지정 |
query | PARTS | Query인 경우 해당하는 query 설정을 등록 |
data | CHILDREN | 해당 API Config를 호출하기 위한 파라미터를 재정의 |
relayType | CODE | Relay 유형 |
relayAuth | REFERENCE | Relay 시 사용할 API 인증 유형을 선택 |
relayHeader | PARTS | Relay 시 Rquest Header에 필요한 항목을 설정 |
bodyType | CODE | Relay 시 Requst Body의 유형(form/raw) |
relayParameters | PARTS | bodyType이 form 인 경우 API 호출에 사용되는 파라미터 설정 |
relayBody | TEXT | bodyType이 raw 인 경우 API 호출에 사용되는 Request Body 설정 |
response | CHILDREN | 해당 API Config의 응답 필드에 대한 정의 |
orderNo | INT | API Config 실행 순서 |
apiConfig 공통 항목
resultType
응답 형태(array, object, none, page)
>>type별 resultType defulat<<
>>type별 사용가능 resultType<<
cacheable
API 요청에 대하여 응답결과를 캐시에 저장하고 설정한 시간동안 캐시 데이터를 반환한다.
default : false
캐시에 저장하려면 캐시키를 구성하기 위한 한개이상의 파라미터 쿼리 검색어가 필요하다.
cacheKey 란?
캐시에 저장할 response에 대한 유일키. api와 파라미터 쿼리를 조합하여 키가 만들어진다.
api::snack>list?&name.matching=오레오
cacheKey api::snack>list?&name.matching=오레오
에 대하여 아래 response가 캐시에 저장된다.
{{protocol}}://{{hostname}}:{{port}}/svc/snack/list?_siteId=bestshop&name=오레오 { "result": "200", "resultMessage": "SUCCESS", "totalCount": 1, "totalTypeCount": 20, "resultCount": 1, "items": [ { "id": "103", "label": "오레오", "name": "오레오" } ] }
cache hit out log
n.ion.ice.core.context.ContextUtils : cache hit fail : api::snack>list?&name.matching=오레오
"cacheable": true
이면 아래 항목 설정 가능
cacheTime
캐시 시간(초)
캐시 시간이 도래하면 캐시가 삭제된다.
캐시 시간 중에는 데이터가 수정되어도 캐시된 응답결과에 반영되지 않는다.
"cacheable": true
이면 cacheTime 설정 필수
keepCache
캐시 유지 여부
주기적(1분)으로 호출하여 캐시를 유지 시킨다.
(keepCache 처리량에 따라 1분이상 딜레이 될 수 있다.)
excludeCacheKey
캐시키에서 제외할 파라미터 목록(예: timeStamp,userId)
allowParams
파라미터 쿼리에 대한 허용 여부
default : false
파라미터 쿼리란?
schema 정의가 되어있는 데이터 리스트에 대하여 파라미터로 쿼리 검색이 가능하도록 API 기능을 지원하고 있다.
if
해당 apiConfig에 대한 실행 여부 테스트(EL 사용) {{:equals(siteId, ‘dxp’)}}
connectTimeout
대상 서비스의 커넥션 타임아웃 설정 ms (default : 5000)
readTimeout
대상 서비스의 응답 타임아웃 설정 ms (default : 10000)
failOver
타임아웃이 발생하거나 500번대 에러가 발생하는 경우 이에 대한 처리
none : 에러 응답 리턴
retry : 재시도
last : 마지막 응답 결과 전송
compensating : 보상 API 호출
compensatingAPI
failOver가 compensating일 경우 보상 API 지정
customResponse
apiConfig 동작의 응답 결과를 조작할 수 있다.
추가적인 처리가 필요한 경우 해당 서비스 정의를 해야한다.
아래는 응답결과에 idx 필드를 추가하는 사례이다.
Class 추가
location : net/ion/ice/core/context/response
implements CustomResponse
하는 class 를 하나 생성한다.
@Component 어노테이션 추가
@Component("sampleResponse")
customResponse 작성
@Component("sampleResponse") public class SampleResponse implements CustomResponse { @Override public List<QueryResult> execute(QueryContext queryContext, List<QueryResult> subList) { int idx = 1; //subList : apiConfig 동작의 응답 결과 리스트 for(QueryResult item : subList){ item.put("idx", idx++); } return subList; } @Override public Map<String, Object> execute(ReadContext readContext, Map<String, Object> itemResult) { return itemResult; } }
apiConfig에 customResponse 세팅
@Component 어노테이션 명으로 작성한다.
{ "typeId": "api", "category": "snack", "apiId": "list", "apiName": "snack List", "apiType": "service", "method": "GET", "parameters": [ ], "statistic": true, "aggregation": false, "root": { "configId": "root", "tid": "snack", "type": "query", "allowParams": true, "customResponse": "sampleResponse", "query": [ ], "response": [ { "field": "_all_", "type": "all" } ] } }
api 응답결과에 idx가 추가된것을 볼수 있다.
{{protocol}}://{{hostname}}:{{port}}/svc/snack/list?_siteId=bestshop&limit=2 { "result": "200", "resultMessage": "SUCCESS", "totalCount": 20, "totalTypeCount": 20, "resultCount": 2, "more": true, "moreCount": 10, "items": [ { "id": "104", "label": "쿠크다스", "name": "쿠크다스", "idx": 1 }, { "id": "103", "label": "오레오", "name": "오레오", "idx": 2 } ] }
response
API 설정에서의 응답 항목은 다음과 같이 정의한다.
pid | valueType | description |
---|---|---|
id | INT | 자동 생성 ID |
targetId | REFERENCE | 해당 API 설정 |
field | STRING | 응답 필드 명 |
type | CODE | 응답 필드 유형
|
value | STRING | 매핑 값, EL 사용 가능 |
config | CHILDREN | type이 config인 경우 하위 API Config 설정 |
response type
type별 사용 가능한 항목
Query | Event | Select | Relay | Read | Reads | Form | Method | Process | Response | |
---|---|---|---|---|---|---|---|---|---|---|
id | ||||||||||
targetId | ||||||||||
configId | ||||||||||
type | ||||||||||
tid | O | O | O | O | O | |||||
resultType | ||||||||||
relayUrl | O | |||||||||
relayMethod | O | |||||||||
datasource | O | |||||||||
sql | O | |||||||||
method | O | |||||||||
process | O | |||||||||
cacheable | ||||||||||
cacheTime | ||||||||||
keepCache | ||||||||||
excludeCacheKey | ||||||||||
allowParams | ||||||||||
if | ||||||||||
connectTimeout | ||||||||||
readTimeout | ||||||||||
customFilter | O | |||||||||
customResponse | ||||||||||
event | O | |||||||||
failOver | ||||||||||
compensatingAPI | ||||||||||
query | O | |||||||||
data | O | O | O | O | ||||||
relayType | O | |||||||||
relayAuth | O | |||||||||
relayHeader | O | |||||||||
bodyType | O | |||||||||
relayParameters | O | |||||||||
relayBody | O | |||||||||
response | ||||||||||
orderNo |