API 카테고리는 API를 그룹화 하여 관리하기 위해서 사용하며, 하위 API에 대한 공통 설정을 정의할 수 있다.
예를들어, API 카테고리에 권한을 설정하면, 하위 API는 모두 같은 해당 권한을 일차적으로 체크하게 된다.
API Category는 다음과 같은 속성을 정의한다.
pid | valueType | description |
---|
id | STRING | 생성할 apiCategory의 ID이며 API 호출 URL의 2번째 Path에 사용 |
categoryName | STRING | apiCategory의 이름 |
apiType | CODE | API 유형 |
apiAuthority | REFERENCES | 권한 |
dateFormat | STRING | dateFormat 설정(하위의 api에 공통으로 적용) yyyy-MM-dd HH:mm:ss |
fileUrlFormat | JSON | API에 리턴되는 file URL의 Prefix 설정(하위의 api에 공통으로 적용) |
commonParameters | CHILDREN | 공통 Parameter 정의(하위의 api에 공통으로 적용)
"commonParameters": [
{
"parameter": "_siteId",
"required": true
},
{
"parameter": "_deviceType",
"required": false
}
]
|
commonResponse | CHILDREN | 하위 API Config에서 사용할 기본 Response 정의
"commonResponse": [
{
"field": "time",
"type": "field",
"value": "{{:sysdate}}"
}
]
|
apiType
ICE의 API 유형은 다음과 같이 구분한다. ▪ service FrontOffice에서 사용하는 API Path : svc
▪ admin▪ manager▪ external ▪ internal ▪ open {{protocol}}://{{hostname}}:{{port}}/api/testEvent/list
{
"timestamp": "2020-10-20T02:45:39.969+0000",
"status": 400,
"error": "Bad Request",
"message": "Required String parameter 'apiKey' is not present",
"path": "/api/testEvent/list"
}
{{protocol}}://{{hostname}}:{{port}}/api/testEvent/list?apiKey=W2!G*LgUu?5*!c*VubLVsfVyW42t$KHt
{
"result": "200",
"resultMessage": "SUCCESS",
"totalCount": 0,
"totalTypeCount": 0,
"resultCount": 0,
"items": []
}
apiType은 apiCategory 와 api 에 각각 설정 가능하다. [apiCategory] apiType : null, [api] apiType : service
{
"typeId": "apiCategory",
"id": "product",
"categoryName": "product API",
"dateFormat": "yyyy-MM-dd HH:mm:ss",
"fileUrlFormat": {
"default": "{{:getEnvValue('core.cluster.api-url-prefix')}}"
},
"commonParameters": [
],
"commonResponse": [
]
}
{
"typeId": "api",
"category": "product",
"apiId": "list",
"apiName": "Product List",
"apiType": "service",
"method": "GET",
"parameters": [
],
"config": {
...
}
}
[apiCategory] apiType : service, [api] apiType : null
{
"typeId": "apiCategory",
"id": "product",
"categoryName": "product API",
"apiType": "service",
"dateFormat": "yyyy-MM-dd HH:mm:ss",
"fileUrlFormat": {
"default": "{{:getEnvValue('core.cluster.api-url-prefix')}}"
},
"commonParameters": [
],
"commonResponse": [
]
}
{
"typeId": "api",
"category": "product",
"apiId": "list",
"apiName": "Product List",
"apiType": "",
"method": "GET",
"parameters": [
],
"config": {
...
}
}
[apiCategory] apiType : service, [api] apiType : admin
{
"typeId": "apiCategory",
"id": "product",
"categoryName": "product API",
"apiType": "service",
"dateFormat": "yyyy-MM-dd HH:mm:ss",
"fileUrlFormat": {
"default": "{{:getEnvValue('core.cluster.api-url-prefix')}}"
},
"commonParameters": [
],
"commonResponse": [
]
}
{
"typeId": "api",
"category": "product",
"apiId": "list",
"apiName": "Product List",
"apiType": "admin",
"method": "GET",
"parameters": [
],
"config": {
...
}
}
|
apiAuthority
API에 리턴되는 file URL의 Prefix 설정(하위의 api에 공통으로 적용)
"fileUrlFormat": {
"default": "{{:getEnvValue('core.cluster.api-url-prefix')}}"
},
getEnvValue
application-default-loc.yml
core:
project: default
internal-port: 8080
session-timeout: 30m
cluster:
api-url-prefix: http://local.i-on.net:8080/
front-url-prefix: http://local.i-on.net:3000/
mode: all
default-service-group: all
members: 127.0.0.1
API Response :
"images": [
{
"id": "409",
"imageType": {
"value": "representative",
"label": "대표이미지"
},
"file": "http://local.i-on.net:8080/productImage/file/202010/12/198395a0-5cbf-42b8-adc8-3c392e2db0a9.jpg",
"label": "",
"name": null,
"fileSize": null,
"width": null,
"height": null
}
]
application-default-dev.yml
core:
project: default
internal-port: 8080
session-timeout: 30m
cluster:
api-url-prefix: http://dev-core.justten.io/
front-url-prefix: http://dev-builder.justten.io/
mode: all
default-service-group: all
members: 127.0.0.1
API Response :
"images": [
{
"id": "409",
"imageType": {
"value": "representative",
"label": "대표이미지"
},
"file": "http://dev-core.justten.io/productImage/file/202010/14/062c86ae-fe0a-479a-bc7b-8d70fa41c135.jpg",
"label": "",
"name": null,
"fileSize": null,
"width": null,
"height": null
}
]
커스텀 가능
Click here to expand...
apiCategory
"fileUrlFormat": {
"default": "{{:getEnvValue(core.cluster.api-url-prefix, url)}}",
"video": "{{:getEnvValue(core.cluster.wowza-url-prefix, url)}}"
}
application.yml
core:
project: sbdc
internal-port: 8080
session-timeout: 30m
single-http-connector: true
cluster:
api-url-prefix: http://dev-core.justten.io/
front-url-prefix: http://dev-builder.justten.io/
wowza-url-prefix: https://vod.justten.io/vod_stg/_definst_/%s/playlist.m3u8
mode: all
default-service-group: all
members: 192.1.1.110
propertyType.json
{
"pid": "fileValue",
"name": "파일",
"valueType": "FILE",
"required": true,
"idable": false,
"labelable": true,
"treeable": false,
"indexable": true,
"analyzer": "simple",
"fileHandler": "video",
"referenceType": "",
"referenceValue": "",
"orderNo": 30
}
VideoFileRepository.java
API Response :
mainImageFile
는 default fileHandler
fileValue
는 video fileHandler
{
"mainImageFile": "http://dev-core.justten.io/imageResource/fileValue/202007/17/48195194-c6e5-4a86-a7e4-a3e61b777032.png",
"fileValue": "https://vod.justten.io/vod/_definst_/videoResource/fileValue/202003/25/21c90041-95eb-406f-8a2b-5e15ef4bc6dd.mp4/playlist.m3u8"
}
설정 예
{
"typeId": "apiCategory",
"id": "product",
"categoryName": "product API",
"dateFormat": "yyyy-MM-dd HH:mm:ss",
"fileUrlFormat": {
"default": "{{:getEnvValue('core.cluster.api-url-prefix')}}"
},
"commonParameters": [
{
"parameter": "_siteId",
"required": true
},
{
"parameter": "_deviceType",
"required": true
}
],
"commonResponse": [
{
"field": "time",
"type": "field",
"value": "{{:sysdate}}"
}
]
}