Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

ICE 내부 특정 NodeType에 대한 쿼리를 실행하기 위한 API 유형으로, 다음과 같은 추가적인 항목을 정의한다.

...

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}}"
      },
      {
        "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": true
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
        }
    ]
}

...

커스텀 처리가 필요한 경우 해당 서비스 정의를 해야한다.

아래는 상품 통합 검색 API에 customFilter를 추가하는 사례이다.

  • Class 추가

    • implements QueryFilter 하는 class 를 하나 생성한다.

  • @Component 어노테이션 추가

    • @Component("productSearchFilter")

  • custom 질의 작성

    • createQuery안에 Lucene에서 제공하는 쿼리로 직접 질의를 작성할 수 있다.

...

Sample

Code Block
languagejson
{
    "typeId": "api",
    "category": "product",
    "apiId": "readsearch",
    "apiName": "상품Product Search 조회List",
    "apiType": "service",
    "method": "GET",
    "parameters": [
      {
        "parameter": "productIdcategoryId",
        "name": "상품ID카테고리아이디",
        "valueType": "STRING",
        "required": true
false
   }   ]},
  "statistic": true,   "aggregation": false,{
   "root": {
    "configIdparameter": "rootsearchValue",
        "tidname": "siteProduct검색어",
        "typevalueType": "querySTRING",
 
  "resultType": "OBJECT",     "cacheablerequired": false,
    "cacheTime": 1, }
   "allowParams": false],
    "orderNostatistic": 1true,
    "customResponseaggregation": "productReadResponse"false,
    "queryroot": [{
      {
"configId": "root",
       "methodtid": "matchingsiteProduct",
        "fieldtype": "idquery",
 
      "valueallowParams": "{{:productId}}" false,
      "orderNo": }1,
      {
"cacheable": true,
       "methodcacheTime": "matching"60,
 
      "fieldcustomResponse": "approvalStatusproductListResponse",
 
      "valuecustomFilter": "approvalproductSearchFilter",
      },"query": [
        {
          "method": "matching",
          "field": "saleStatussite",
          "value": "selling"{{:_siteId}}"
        },
        {
          "method": "matching",
          "field": "exposureapprovalStatus",
          "value": "trueapproval"
        },
        {
          "method": "matching",
          "field": "deletedsaleStatus",
          "value": "falseselling"
        },
        {
          "method": "matching",
          "field": "siteexposure",
          "value": "{{:_siteId}}true"
        },
        {
           ],"method": "matching",
          "responsefield": [ "deleted",
          "value": "false"
  {      },
   "field": "id",     {
          "method": "sorting",
          "value": "{{:sorting}},id desc"
        },
        {
          "method": "page",
          "value": "{{:page}}"
        },
        {
          "typemethod": "fieldpageSize",
          "value": "{{:pageSize}}"
        },
        {
          "fieldmethod": "namematching",
          "typefield": "fieldsiteCategories",
          "value": ""
      },
      {
   {{:categoryId}}"
    "field": "siteProductSaleInfo",   }
     "type": "field",
  ],
      "valueresponse": ""[
      },     {
 {         "field": "optionTypeid",
          "type": "field",
          "value": "baseProduct.productOptionInfo.optionType"
        },
        {
          "field": "productOptionCodesname",
          "type": "field",
          "value": "baseProduct.productOptionInfo.productOptionCodes""
        },
        {
          "field": "productOptionssiteCategories",
          "type": "field",
          "value": "baseProduct.productOptionInfo.productOptions"
        },
        {
          "field": "productDetailsiteProductSaleInfo",
          "type": "field",
          "value": "baseProduct.productDetail"
        },
        {
          "field": "images",
          "type": "field",
          "value": "baseProduct.images"
        },
        {
          "field": "videoscreated",
          "type": "field",
          "value": "baseProduct.videoscreated"
        }
      ]
    }
  }