공지사항 게시판을 만들어 보자..
“ noticeBoard “
Field ID | Field Name | Value Type | Nullable | Default Value |
---|---|---|---|---|
id PK | 아이디 | long | N | |
title | 제목 | string | N | |
content | 내용 | clob | N | |
file | 첨부파일 | string | ||
enable | 사용여부 | boolean | true | |
owner FK | 등록자 | string | ||
created | 등록일 | date | ||
modifier FK | 수정자 | string | ||
changed | 수정일 | date |
Schema 작성
NodeType
[ { "typeId": "nodeType", "parentId": "root", "tid": "noticeBoard", "typeName": "게시판", "repositoryType": "node", "tableName": "", "propertyTypes": [ ] } ]
PropertyType
Primary Key
“idable” : “true”
idType
id 자동 생성 유형
idType 이 없으면 id 직접 입력
autoIncrement, UUID, hash
[ { "typeId": "nodeType", "parentId": "root", "tid": "noticeBoard", "typeName": "게시판", "repositoryType": "node", "tableName": "", "propertyTypes": [ { "pid": "id", "name": "ID", "valueType": "LONG", "idable": true, "idType": "hash", "indexable": true, "orderNo": 10 }, { "pid": "title", "name": "제목", "valueType": "STRING", "required": true, "labelable": true, "indexable": true, "analyzer": "simple", "orderNo": 2 }, { "pid": "content", "name": "내용", "valueType": "TEXT", "required": true, "indexable": false, "orderNo": 3 }, { "pid": "file", "name": "File", "valueType": "FILE", "required": false, "indexable": false, "orderNo": 4 }, { "pid": "enable", "name": "사용여부", "valueType": "BOOLEAN", "required": false, "indexable": true, "defaultValue": "true", "orderNo": 5 }, { "pid": "owner", "name": "등록자", "valueType": "REFERENCE", "indexable": true, "analyzer": "code", "referenceType": "user", "orderNo": 6 }, { "pid": "created", "name": "등록일", "valueType": "DATE", "required": false, "indexable": true, "orderNo": 7 }, { "pid": "modifier", "name": "수정자", "valueType": "REFERENCE", "indexable": true, "analyzer": "code", "referenceType": "user", "orderNo": 8 }, { "pid": "changed", "name": "수정일", "valueType": "DATE", "required": false, "indexable": true, "analyzer": "simple", "orderNo": 9 } ] } ]
loadSchema
작성한 schema 를 caching 한다.
GET {{protocol}}://{{hostname}}:{{port}}/helper/loadSchema
filePath : Absolute Path
helper/loadSchema :
helper/reloadSchema :
{{protocol}}://{{hostname}}:{{port}}/helper/loadSchema?filePath=/Users/jjong/IdeaProjects/backendcore/src/main/resources/schema/common/site
Caching 된 Schema (NodeType, PropertyType)를 조회해볼 수 있다. ( NodeController.java 참조 )
GET {{protocol}}://{{hostname}}:{{port}}/node/nodeType/noticeBoard
GET {{protocol}}://{{hostname}}:{{port}}/node/nodeType/read.json?id=noticeBoard
GET {{protocol}}://{{hostname}}:{{port}}/node/nodeType/list.json?id_matching=noticeBoard
GET {{protocol}}://{{hostname}}:{{port}}/node/propertyType/list.json?tid_matching=noticeBoard
기본 CRUD API
작성한 schema nodeType에서 기본 제공하는 crud API
GET {{protocol}}://{{hostname}}:{{port}}/node/noticeBoard/list.json
GET {{protocol}}://{{hostname}}:{{port}}/node/noticeBoard/read.json?id=100
POST {{protocol}}://{{hostname}}:{{port}}/node/noticeBoard/create.json
POST {{protocol}}://{{hostname}}:{{port}}/node/noticeBoard/update.json
primary key 필수
POST {{protocol}}://{{hostname}}:{{port}}/node/noticeBoard/delete.json
primary key 필수
POST {{protocol}}://{{hostname}}:{{port}}/node/noticeBoard/save.json
primary key 가 없으면 CREATE , 없으면 UPDATE 처리
API
api Cartegory
[ { "typeId": "apiCategory", "id": "notice", "categoryName": "Notice Board API", "dateFormat": "yyyy-MM-dd HH:mm:ss", "fileUrlFormat": { "default": "{{:getEnvValue('core.cluster.api-url-prefix')}}" }, "commonParameters": [ { "parameter": "apiKey", "required": false } ], "commonResponse": [ { "field": "time", "type": "field", "value": "{{:sysdate}}" } ] } ]
api
FRONT 공지사항 리스트
{{protocol}}://{{hostname}}:{{port}}/svc/notice/list
Params
sorting
page
pageSize
Config
type : query
cacheable : true / cacheType : 60 → API 결과를 60초간 캐싱
Response
아래와 같이 api 응답결과의 필드를 지정할수도 있고, 모든 필드를 반환할 수도 있다.
"response": [ { "field": "id", "type": "field", "value": "" }, { "field": "title", "type": "field", "value": "" } ]
"response": [ { "field": "_all_", "type": "all" } ]
{ "typeId": "api", "category": "notice", "apiId": "list", "apiName": "공지사항 리스트", "apiType": "service", "method": "GET", "parameters": [ ], "config": [ { "configId": "root", "tid": "noticeBoard", "type": "query", "allowParams": false, "orderNo": 1, "cacheable": true, "cacheTime": 60, "query": [ { "method": "matching", "field": "enable", "value": "true" }, { "method": "sorting", "value": "{{:sorting}},id desc" }, { "method": "page", "value": "{{:page}}" }, { "method": "pageSize", "value": "{{:pageSize}}" } ], "response": [ { "field": "id", "type": "field", "value": "" }, { "field": "title", "type": "field", "value": "" }, { "field": "owner", "type": "field", "value": "" }, { "field": "created", "type": "field", "value": "" } ] } ] }
FRONT 공지사항 조회
FRONT 공지사항 리스트
FRONT 공지사항 조회