진짜 개발자는 엑셀부터 키는 개발자야.
by. TigerDragon
이번에는 DDaJa에서 Spring Boot로 구성된 BackEnd Server에서 제공할 REST API를 작성해보려 한다.
Node Front End로 구성된 Vue 서버에서 Data 송,수신을 위한 API가 필요하고,
필요한 기능들에 맞게 먼저 기능들을 B
와 함께 작성해놓았다.
아래와 같은 순서로 최종적으로 API를 개발해보려한다.
먼저 사용자에게 필요한 기능들은 위와 같이 간략하게 정리하였다.
이제 실제 Schema와 함께 예시 URL을 작성하려 한다.
먼저 아직 수정중이긴 하지만 DB Schema는 아래와 같다.
아 너무 작은데 ㅋㅋ
GET api.ddaja.com/licenses
HTTP/1.1 200 OK
Link:
<https://api.ddaja.com/licenses?offset=10&limit=10>; rel="next"
, <https://api.ddaja.com/licenses?offset=50&limit=10>; rel="last"
, <https://api.ddaja.com/licenses?offset=0&limit=10>; rel="first"
, <https://api.ddaja.com/licenses?offset=0&limit=0>; rel="prev"
{
"total_cnt": 120
, "items": [
{
"info": {
"seq": 1
, "name": "정보처리기사"
, "ins_date": "2021-05-30"
, "agency": "Q-Net"
, "pass_score": 70
}
, "links": [
{
"rel": "self",
"href": "http://api.ddaja.com/licenses/1",
"method": "GET"
},
{
"rel": "delete",
"href": "http://api.ddaja.com/licenses/1",
"method": "DELETE"
}
]
}
, {
"info": {
"seq": 2
, "name": "빅데이터기사"
, "ins_date": "2021-04-29"
, "agency": "Q-Net"
, "pass_score": 70
}
, "links": [
{
"rel": "self",
"href": "http://api.ddaja.com/licenses/2",
"method": "GET"
},
{
"rel": "delete",
"href": "http://api.ddaja.com/licenses/2",
"method": "DELETE"
}
]
}
, {
"info": {
"seq": 3
, "name": "컴퓨터활용능력1급"
, "ins_date": "2021-05-10"
, "agency": "Q-Net"
, "pass_score": 70
}
, "links": [
{
"rel": "self",
"href": "http://api.ddaja.com/licenses/3",
"method": "GET"
},
{
"rel": "delete",
"href": "http://api.ddaja.com/licenses/3",
"method": "DELETE"
}
]
}
, ...
]
}
GET api.ddaja.com/licenses/1
HTTP/1.1 200 OK
{
"info": {
"seq": 1
, "name": "정보처리기사"
, "ins_date": "2021-04-29"
, "agency": "Q-Net"
, "pass_score": 70
}
, "links": [
{
"rel": "self",
"href": "http://api.ddaja.com/licenses/3",
"method": "GET"
},
{
"rel": "delete",
"href": "http://api.ddaja.com/licenses/3",
"method": "DELETE"
}
]
}
GET api.ddaja.com/licenses/subjects
HTTP/1.1 200 OK
Link:
<https://api.ddaja.com/licenses/subjects?offset=10&limit=10>; rel="next"
, <https://api.ddaja.com/licenses/subjects?offset=50&limit=10>; rel="last"
, <https://api.ddaja.com/licenses/subjects?offset=0&limit=10>; rel="first"
, <https://api.ddaja.com/licenses/subjects?offset=0&limit=0>; rel="prev"
{
"licenses": [
{
"info": {
"seq": 1
, "name": "정보처리기사"
, "subjects": [
{
"info": {
"seq": 1
, "name": "전자계산기구조"
, "ins_date": "2021-06-01"
, "pass_score": 60
}
}
,{
"info": {
"seq": 2
, "name": "컴퓨터공학기초"
, "ins_date": "2021-06-03"
, "pass_score": 60
}
}
,{
"info": {
"seq": 3
, "name": "프로그램이론"
, "ins_date": "2021-06-02"
, "pass_score": 60
}
}
,{
"info": {
"seq": 4
, "name": "정보보안"
, "ins_date": "2021-06-04"
, "pass_score": 60
}
}
]
}
}
, {
"info": {
"seq": 2
, "name": "빅데이터기사"
, "subjects": [
{
"info": {
"seq": 5
, "name": "빅데이터이론"
, "ins_date": "2021-06-01"
, "pass_score": 60
}
}
,{
"info": {
"seq": 6
, "name": "알고리즘"
, "ins_date": "2021-06-03"
, "pass_score": 60
}
}
,{
"info": {
"seq": 7
, "name": "데이터"
, "ins_date": "2021-06-02"
, "pass_score": 60
}
}
,{
"info": {
"seq": 8
, "name": "빅데이터개론"
, "ins_date": "2021-06-04"
, "pass_score": 60
}
}
]
}
}
}
GET /users/status
HTTP/1.1 200 OK
Link:
<https://api.ddaja.com/users/status?offset=10&limit=10>; rel="next"
, <https://api.ddaja.com/users/status?offset=50&limit=10>; rel="last"
, <https://api.ddaja.com/users/status?offset=0&limit=10>; rel="first"
, <https://api.ddaja.com/users/status?offset=0&limit=0>; rel="prev"
{
"users": [
{
"user": {
"seq": 1
, "name": "gil"
, "id": "gillog"
}
, "state": {
"type": "one_question"
, "progress": "ing"
, "detail": ""
}
}
, {
"user": {
"seq": 2
, "name": "bin"
, "id": "binsoo"
}
, "state": {
"type": "round_question"
, "progress": "done"
, "detail": "perfect"
}
}
, ...
]
}
GET /licenses/exams/
HTTP/1.1 200 OK
Link:
<https://api.ddaja.com/licenses/dday?offset=10&limit=10>; rel="next"
, <https://api.ddaja.com/licenses/dday?offset=50&limit=10>; rel="last"
, <https://api.ddaja.com/licenses/dday?offset=0&limit=10>; rel="first"
, <https://api.ddaja.com/licenses/dday?offset=0&limit=0>; rel="prev"
{
"licenses": [
{
"license": {
"seq": 1
, "name": "정보처리기사"
, "exams": [
{
"exam": {
"seq": 1
, "name": "정보처리기사 실기 2회"
, "date": "2021-06-01"
, "info": "펜 볼펜 등 필수 지참"
}
}
, {
"exam": {
"seq": 2
, "name": "정보처리기사 필기 3회"
, "date": "2021-09-01"
, "info": "펜 볼펜 등 필수 지참"
}
}
, {
"exam": {
"seq": 3
, "name": "정보처리기사 실기 3회"
, "date": "2021-12-01"
, "info": "펜 볼펜 등 필수 지참"
}
}
]
}
, ...
]
}
GET /notice
HTTP/1.1 200 OK
Link:
<https://api.ddaja.com/notice?offset=10&limit=10>; rel="next"
, <https://api.ddaja.com/notice?offset=50&limit=10>; rel="last"
, <https://api.ddaja.com/notice?offset=0&limit=10>; rel="first"
, <https://api.ddaja.com/notice?offset=0&limit=0>; rel="prev"
{
"notice": [
{
"seq": 1
, "title": "공지사항 1번글"
, "content": "공지사항 본문 ~~~"
, "ins_date": "2021-06-25"
, "in_use": 0
}
, {
"seq": 2
, "title": "공지사항 2번글"
, "content": "공지사항 본문 !!~~~"
, "ins_date": "2021-06-26"
, "in_use": 1
}
, ...
]
}
GET /notice