ICE 내부 특정 NodeType에 대한 쿼리를 실행하기 위한 API 유형으로, 다음과 같은 추가적인 항목을 정의한다.
...
Expand |
---|
|
Code Block |
---|
{
"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",
"cacheable": true,
"cacheTime": 60,
"customResponse": "sampleResponse",
"query": [
{
"method": "matchingShould",
"field": "id",
"value": "{{:id}}"
},
{
"method": "matchingShould",
"field": "name",
"value": "{{:name}}"
}
],
"response": [
{
"field": "_all_",
"type": "all"
}
]
} |
{{protocol}}://{{hostname}}:{{port}}/svc/snack/list?_siteId=bestshop&id=104&name=오레오 cacheKey api::snack>list?&id.matchingShould=104&name.matchingShould=오레오 Code Block |
---|
{
"result": "200",
"resultMessage": "SUCCESS",
"totalCount": 2,
"totalTypeCount": 20,
"resultCount": 2,
"items": [
{
"id": "104",
"label": "쿠크다스",
"name": "쿠크다스",
"idx": 1
},
{
"id": "103",
"label": "오레오",
"name": "오레오",
"idx": 2
}
]
} |
|
Expand |
---|
title | "useCacheKey": false |
---|
|
Code Block |
---|
{
"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",
"cacheable": true,
"cacheTime": 60,
"customResponse": "sampleResponse",
"query": [
{
"method": "matchingShould",
"field": "id",
"value": "{{:id}}",
"useCacheKey": false
},
{
"method": "matchingShould",
"field": "name",
"value": "{{:name}}"
}
],
"response": [
{
"field": "_all_",
"type": "all"
}
]
}
} |
{{protocol}}://{{hostname}}:{{port}}/svc/snack/list?_siteId=bestshop&id=104&name=오레오{{protocol}}://{{hostname}}:{{port}}/svc/snack/list?_siteId=bestshop&id=105&name=오레오 cacheKey api::snack>list?&name.matchingShould=오레오 cacheKey에서 id 제외 [ id=104, name=오레오 ] 로 검색 후 cacheKey에 60초간 캐싱 이후 [ id=105, name=오레오 ] 로 검색하더라도 60초간 응답결과는 변화가 없다.
Code Block |
---|
{
"result": "200",
"resultMessage": "SUCCESS",
"totalCount": 2,
"totalTypeCount": 20,
"resultCount": 2,
"items": [
{
"id": "104",
"label": "쿠크다스",
"name": "쿠크다스",
"idx": 1
},
{
"id": "103",
"label": "오레오",
"name": "오레오",
"idx": 2
}
]
} |
|
...
커스텀 처리가 필요한 경우 해당 서비스 정의를 해야한다.
아래는 customFilter를 추가하는 사례이다.
Class 추가
@Component 어노테이션 추가
custom 질의 작성
...
apiConfig에 customFilter 세팅
...
아래 API 설명
apiConfig query
customFilter
name의 "analyzer": "simple"
- like 검색을 wildcard로 할 수 있다.
tags의 "analyzer": "code"
- 콤마로 tokenize 되어있으므로 쪼개진 word에 대하여 matching으로 equals 검색을 할 수 있다.
Expand |
---|
title | sample snack schema 정의 참조 |
---|
|
Code Block |
---|
[
{
"typeId": "nodeType",
"tid": "snack",
"parentId": "test",
"repositoryType": "node",
"typeName": "간식",
"standaloneIndex": false,
"microservice": "test",
"propertyTypes": [
{
"pid": "id",
"name": "ID",
"valueType": "STRING",
"idable": true,
"indexable": true,
"labelable": false,
"required": true,
"idType": "",
"orderNo": 10
},
{
"pid": "name",
"name": "Name",
"valueType": "STRING",
" |
|
...
...
...
...
...
...
true,
"required": true,
"orderNo": 20
},
{
"pid": "vendor",
"name": "vendor",
"valueType": "STRING",
" |
|
...
indexable": true,
"analyzer": "code ",
" |
|
...
orderNo": 30
},
{
"pid": "tags",
"name": "tags",
"valueType": "STRING",
" |
|
...
indexable": true,
"analyzer": "code",
|
|
...
...
...
아래 API 정의
apiConfig query
customFilter
name의 "analyzer": "simple"
- like 검색을 wildcard로 할 수 있다.
...
Code Block |
---|
{
"typeId": "api",
"category": "snack",
"apiId": "search",
"apiName": "snack search List",
"apiType": "service",
"method": "GET",
"parameters": [
{
"parameter": "name",
"name": "이름",
"valueType": "STRING",
"required": false
},
{
"parameter": "tags",
"name": "검색어",
"valueType": "STRING",
"required": false
}
],
"statistic": true,
"aggregation": false,
"root": {
"configId": "root",
"tid": "snack",
"type": "query",
"customFilter": "sampleFilter",
"query": [
{
"method": "wildcard",
"field": "name",
"value": "{{:name}}"
}
],
"response": [
{
"field": "id",
"type": "field",
"value": ""
},
{
"field": "name",
"type": "field",
"value": ""
},
{
"field": "vendor",
"type": "field",
"value": ""
},
{
"field": "tags",
"type": "field",
"value": ""
}
]
}
} |
...