Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 13 Next »

API 카테고리는 API를 그룹화 하여 관리하기 위해서 사용하며, 하위 API에 대한 공통 설정을 정의할 수 있다.

예를들어, API 카테고리에 권한을 설정하면, 하위 API는 모두 같은 해당 권한을 일차적으로 체크하게 된다.

{{protocol}}://{{hostname}}:{{port}}/{{apiType}}/{{apiCategory}}/{{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

{{protocol}}://{{hostname}}:{{port}}/svc/{{apiCategory}}/{{api}}?_siteId=dxp

  • _siteId 항상 필수

  • 자동 생성 API 사용 불가능. 설정 API 만 사용 가능.

  • 인증 : Customer의 세션을 사용한다.

GET {{protocol}}://{{hostname}}:{{port}}/auth/svc/jwt?_siteId=dxp

▪ admin

  • Admin 사용자용 BackOffice를 위한 API

  • Path : adm

{{protocol}}://{{hostname}}:{{port}}/adm/{{nodeType}}/{{event}}

{{protocol}}://{{hostname}}:{{port}}/adm/{{apiCategory}}/{{api}}

  • 인증 : 반드시 로그인된 Admin 사용자만 사용 가능

GET {{protocol}}://{{hostname}}:{{port}}/auth/adm/jwt

POST {{protocol}}://{{hostname}}:{{port}}/adm/signIn

▪ manager

  • Manger 사용자용 BackOffice를 위한 API

  • Path : mng

{{protocol}}://{{hostname}}:{{port}}/mng/{{nodeType}}/{{event}}

{{protocol}}://{{hostname}}:{{port}}/mng/{{apiCategory}}/{{api}}

  • 인증 : 반드시 로그인된 Manager 사용자만 사용 가능

GET {{protocol}}://{{hostname}}:{{port}}/auth/mng/jwt

POST {{protocol}}://{{hostname}}:{{port}}/mng/signIn

▪ external

  • 외부 또는 레거시 시스템과 연동을 위해서 사용하는 API

  • Path : ext

{{protocol}}://{{hostname}}:{{port}}/ext/{{nodeType}}/{{event}}

{{protocol}}://{{hostname}}:{{port}}/ext/{{apiCategory}}/{{api}}

  • 인증 : API 키를 통해서 인증

▪ internal

  • ICE 내부 서비스간 연동을 위해서 사용하는 API

  • Path : int

{{protocol}}://{{hostname}}:{{port}}/int/{{nodeType}}/{{event}}

{{protocol}}://{{hostname}}:{{port}}/int/{{apiCategory}}/{{api}}

  • 인증 : 클러스터에 등록된 서버들만 통신 가능

▪ open

  • 오픈 API에 사용

  • Path : api

{{protocol}}://{{hostname}}:{{port}}/api/{{nodeType}}/{{event}}

{{protocol}}://{{hostname}}:{{port}}/api/{{apiCategory}}/{{api}}

  • 자동 생성 API 사용 불가능. 설정 API 만 사용 가능.

  • 인증 : API Key를 이용한 인증 사용, 요구사항에 따라서 인증 방식 확장이 가능(OAuth 등)

 {{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은 apiCategoryapi 에 각각 설정 가능하다.

  • apiCategory 설정되어있고 api에 설정 안되어있으면 하위 api 는 apiCategory의 apiType을 따른다.

  • apiCategory와 하위 api에 서로다른 apiType이 설정되어 있는 경우 api 는 자신의 apiType을 따른다.

 [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": {
    ...
  }
}

{{protocol}}://{{hostname}}:{{port}}/svc/product/list?_siteId=dxp

 [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": {
    ...
  }
}

{{protocol}}://{{hostname}}:{{port}}/svc/product/list?_siteId=dxp

 [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": {
    ...
  }
}

{{protocol}}://{{hostname}}:{{port}}/adm/product/list

apiAuthority

fileUrlFormat

API에 리턴되는 file URL의 Prefix 설정(하위의 api에 공통으로 적용)

"fileUrlFormat": {
  "default": "{{:getEnvValue('core.cluster.api-url-prefix')}}"
},

getEnvValue

  • Profile에 따라 환경 변수를 치환하여 결과를 반환한다.

 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

  • "video" 추가

"fileUrlFormat": {
      "default": "{{:getEnvValue(core.cluster.api-url-prefix, url)}}",
      "video": "{{:getEnvValue(core.cluster.wowza-url-prefix, url)}}"
}

application.yml

  • core.cluster.wowza-url-prefix 설정

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

  • "fileHandler": "video", 설정

{
  "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

  • FileRepository 추가. implements FileRepository

  • 명명규칙

    • {{fileHandler}}FileRepository.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}}"
      }
    ]
  }
  • No labels