Skip to content

Latest commit

 

History

History
571 lines (427 loc) · 9.75 KB

File metadata and controls

571 lines (427 loc) · 9.75 KB

📚 API 구현 목록

API Reference
회원
회원가입
  • URL

    /members/join

  • Method:

    POST

  • Data Params

    Required:

    loginId=[String] - 로그인 아이디
    password=[String] - 패스워드

    Optional:

    없음

  • Response

    id=[Long] - 유저 고유식별 번호
    loginId=[String] - 로그인 아이디

  • Success Response:

HTTP/1.1 201 Created
Content-type: application/json;charset=UTF-8
{
  "id": 1,
  "loginId": "id",
}
에러 코드

###회원 중복 시

  • Response

    status=[Integer] - 에러 코드
    error=[String] - 에러 메시지
    path=[String] - URI

  • Response Body:

HTTP/1.1 409 Conflict
{
    "timestamp": "2022-05-17T09:43:46.133+00:00",
    "status": 409,
    "error": "Conflict",
    "path": "/members/join"
}
로그인
  • URL

    /login

  • Method:

    POST

  • Data Params

    Required:

    loginId=[String] - 로그인 아이디
    password=[String] - 패스워드

    Optional:

    없음

  • Response

    memberId=[Long] - 유저 고유식별 번호

  • Success Response:

HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
  "memberId": 1
}
회원 리스트 조회
  • URL

    /members

  • Method:

    GET

  • Data Params

    Required:

    없음

    Optional:

    없음

  • Response

    id=[Long] - 유저 고유식별 번호
    loginId=[String] - 로그인 아이디

  • Success Response:

HTTP/1.1 201 Created
Content-type: application/json;charset=UTF-8
[
    {
        "id": 1,
        "loginId": "user4"
    },
    {
        "id": 2,
        "loginId": "user1"
    }
]
플레이리스트
플레이리스트 생성
  • URL

    /playlists/{member_id}/create

  • Method:

    POST

  • Data Params

    Required:

    name=[String] - 플레이리스트 이름

    Optional:

    없음

  • Response

    playlistId=[Long] - 플레이리스트 고유식별 번호
    name=[String] - 재생목록 이름
    imageUrl=[String] - 플레이리스트 이미지 url

  • Success Response:

HTTP/1.1 201 Created
Content-type: application/json;charset=UTF-8
{
    "playlistId": 1,
    "name": "나의 재생목록",
    "imageUrl": "https://i.scdn.co/image/ab67616d00001e02ff9ca10b55ce82ae553c8228"
}
회원 플레이리스트 목록 조회
플레이리스트 고유 아이디, 플레이리스트 이름, 썸네일(첫 곡 앨범커버)를 가져옵니다.
  • URL

    /playlists/{member_id}

  • Method:

    GET

  • Data Params

    Required:

    없음

  • Response

    playlistId=[Long] - 플레이리스트 고유식별 번호
    name=[String] - 재생목록 이름
    imageUrl=[String] - 플레이리스트 이미지 url

  • Success Response:

HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
[
    {
        "playlistId": 3,
        "name": "나의 재생목록",
        "imageUrl": "https://i.scdn.co/image/ab67616d00001e02ff9ca10b55ce82ae553c8228"
    },
    {
        "playlistId": 4,
        "name": "나의 재생목록2",
        "imageUrl": "https://i.scdn.co/image/ab67616d00001e02ff9ca10b55ce82ae553c8228"
    }
]
플레이리스트에 음악 추가
플레이리스트에 음악을 여러 개 추가합니다.
  • URL

    /playlists/{playlist_id}/add

  • Method:

    POST

  • Request Body (JSON)

  {
    "songIdList": [
      "1VnjByC7TUx5A73A4qtgoo",
      "3P3UA61WRQqwCXaoFOTENd",
      "2GBrW5lRWjAQMhK612qzVg",
      "4eFTh1opLS5wANDmZK9ghC"
    ]
  }
  • Response

    200 OK

  • Success Response:

success
플레이리스트 음악 목록 가져오기
플레이리스트 하나의 모든 음악 spotify id를 가져옵니다.
  • URL

    /playlists/{memberId}/{playlistId}

  • Method:

    GET

  • Request Body (JSON)

  없음
  • Response

    200 OK

  • Success Response:

[
    {
        "id": "3P3UA61WRQqwCXaoFOTENd",
        "name": "Through the Night",
        "albumName": "Palette",
        "artistName": "IU",
        "imageUrl": ""
    },
    {
        "id": "1VnjByC7TUx5A73A4qtgoo",
        "name": "우산 (feat. 윤하)",
        "albumName": "Pieces, Part One",
        "artistName": "Epik High",
        "imageUrl": ""
    },
    {
        "id": "2GBrW5lRWjAQMhK612qzVg",
        "name": "The End",
        "albumName": "One Strange Night",
        "artistName": "Kwon Jin Ah",
        "imageUrl": ""
    },
    {
        "id": "4eFTh1opLS5wANDmZK9ghC",
        "name": "Cherry Blossom Ending",
        "albumName": "Busker Busker 1st",
        "artistName": "Busker Busker",
        "imageUrl": ""
    }
]
추천 API
노래 하나로 추천
  • URL

    /recommend/song

  • Method:

    POST

  • Data Params

    Required:

{
  "songId": "3P3UA61WRQqwCXaoFOTENd",
  "category": [
    "danceability",
    "tempo"
  ]
}
  • Response

    id=[String] - spotify 음악 id
    name=[String] - 노래 제목 albumName=[String] - 앨범 제목 artistName=[String] - 가수 이름 imageUrl=[String] - 앨범커버url

  • Success Response:

[
    {
        "id": "4UCkX8nrBlpxjrrEqtb46a",
        "name": "Apache",
        "albumName": "8th Wonder",
        "artistName": "The Sugarhill Gang",
        "imageUrl": ""
    },
    {
        "id": "5xJ5bNY2SUh1iO2l8Hj9l1",
        "name": "Ping Pong",
        "albumName": "Collected Recordings",
        "artistName": "Gareth Dickson",
        "imageUrl": ""
    },
    {
        "id": "5xJ5bNY2SUh1iO2l8Hj9l1",
        "name": "Ping Pong",
        "albumName": "Collected Recordings",
        "artistName": "Gareth Dickson",
        "imageUrl": ""
    }
]
플레이리스트로 추천
  • URL

    /recommend/playlist

  • Method:

    POST

  • Data Params

    Required:

{
  "songIdList": [
    "3P3UA61WRQqwCXaoFOTENd",
    "1VnjByC7TUx5A73A4qtgoo",
    "2GBrW5lRWjAQMhK612qzVg",
    "4eFTh1opLS5wANDmZK9ghC"
  ],
  "category": [
    "danceability",
    "tempo"
  ]
}
  • Response

    id=[String] - spotify 음악 id
    name=[String] - 노래 제목 albumName=[String] - 앨범 제목 artistName=[String] - 가수 이름 imageUrl=[String] - 앨범커버url

  • Success Response:

[
    {
        "id": "4UCkX8nrBlpxjrrEqtb46a",
        "name": "Apache",
        "albumName": "8th Wonder",
        "artistName": "The Sugarhill Gang",
        "imageUrl": ""
    },
    {
        "id": "5xJ5bNY2SUh1iO2l8Hj9l1",
        "name": "Ping Pong",
        "albumName": "Collected Recordings",
        "artistName": "Gareth Dickson",
        "imageUrl": ""
    },
    {
        "id": "5xJ5bNY2SUh1iO2l8Hj9l1",
        "name": "Ping Pong",
        "albumName": "Collected Recordings",
        "artistName": "Gareth Dickson",
        "imageUrl": ""
    }
]
검색
  • URL

    /search?keyword={}

  • Method:

    GET

  • Data Params

none
  • Response

    id=[String] - spotify 음악 id
    name=[String] - 노래 제목 albumName=[String] - 앨범 제목 artistName=[String] - 가수 이름 imageUrl=[String] - 가수 이름

  • Success Response:

[
    {
        "id": "4UCkX8nrBlpxjrrEqtb46a",
        "name": "Apache",
        "albumName": "8th Wonder",
        "artistName": "The Sugarhill Gang",
        "imageUrl": ""
    },
    {
        "id": "5xJ5bNY2SUh1iO2l8Hj9l1",
        "name": "Ping Pong",
        "albumName": "Collected Recordings",
        "artistName": "Gareth Dickson",
        "imageUrl": ""
    },
    {
        "id": "5xJ5bNY2SUh1iO2l8Hj9l1",
        "name": "Ping Pong",
        "albumName": "Collected Recordings",
        "artistName": "Gareth Dickson",
        "imageUrl": ""
    }
]

서버 실행 방법

H2 데이터베이스 설치

  1. 링크로 다운로드 후 압축 해제
    https://h2database.com/h2-2019-10-14.zip
  2. h2 데이터베이스 실행
$ cd h2/bin
$ ./h2.sh
  1. url 수정
    xxx.xxx.xxx.xxx:8082/login... -> localhost:8082/login...
  2. .db파일 생성
    4-1. JDBC URL - jdbc:h2:~/musicapp
    4-2. ~/musicapp.mv/db 파일 생성 확인
    4-3. 이후 부터는 JDBC URL - jdbc:h2:tcp://localhost/~/musicapp로 접속

Spotify API Client

  1. 링크로 Spotify Client 생성 https://developer.spotify.com/dashboard/login
  2. Spotify API Key 설정 파일 추가
$ cd back/music/src/main/resources
$ touch application-API-KEY.properties
$ echo -e "spotify.client.id=${SPOTIFY-CLIENT-ID}\nspotify.client.secret=${SPOTIFY-CLIENT-SECRET}" >> application-API-KEY.properties 

서버 실행

h2 데이터베이스가 실행상태여야 합니다.
Java 11버전이 다운로드 되어있어야 합니다.

  1. gradle 빌드
$ cd back/music
$ ./gradlew build
  1. spring 서버 실행
$ java -jar build/libs/music-0.0.1-SNAPSHOT.jar