연동 가이드
관측지
관측지 목록 조회, 검색, 즐겨찾기 연동 가이드
엔드포인트 요약
| 메서드 | 경로 | 설명 | 인증 필요 |
|---|---|---|---|
| GET | /observationsites | 관측지 목록 (페이지네이션) | ❌ |
| GET | /observationsites/{id} | 관측지 상세 조회 | ❌ |
| GET | /observationsites/name?keyword= | 관측지 이름 검색 | ❌ |
| POST | /me/saved-sites/toggle | 즐겨찾기 토글 | ✅ |
| GET | /me/saved-sites | 저장된 관측지 목록 | ✅ |
| DELETE | /me/saved-sites/{savedSiteId} | 즐겨찾기 삭제 | ✅ |
관측지 목록 조회
GET /observationsites?page={페이지}&size={개수}기본값: size=20, name 기준 오름차순 정렬.
응답
{
"content": [
{
"id": 1,
"name": "별마로 천문대",
"latitude": 37.1978,
"longitude": 128.4865,
"averageScore": 4.3
},
{
"id": 2,
"name": "소백산 천문대",
"latitude": 36.9397,
"longitude": 128.4858,
"averageScore": null
}
],
"totalElements": 42,
"totalPages": 3,
"number": 0,
"size": 20
}| 필드 | 타입 | 설명 |
|---|---|---|
id | Long | 관측지 ID |
name | String | 관측지 이름 |
latitude | Double | 위도 |
longitude | Double | 경도 |
averageScore | Double? | 평균 평점 (리뷰 없으면 null) |
averageScore는 해당 관측지에 등록된 후기(ReviewPost)의 평균 점수(소수점 1자리)입니다. 리뷰가 없는 관측지는null로 반환됩니다.
관측지 상세 조회
GET /observationsites/{id}응답
{
"success": true,
"message": "OK",
"data": {
"id": 1,
"name": "별마로 천문대",
"latitude": 37.1978,
"longitude": 128.4865,
"reviewCount": 12,
"totalLikes": 34,
"averageScore": 4.3
}
}| 필드 | 타입 | 설명 |
|---|---|---|
reviewCount | Long | 후기 게시글 수 |
totalLikes | Long | 관련 게시글 총 좋아요 수 |
averageScore | Double | 평균 평점 (리뷰 없으면 0.0) |
관측지 이름 검색
GET /observationsites/name?keyword={검색어}- 2자 이상: FULLTEXT 검색
- 1자: LIKE fallback
응답
[
{
"id": 1,
"name": "별마로 천문대",
"latitude": 37.1978,
"longitude": 128.4865,
"averageScore": 4.3
}
]즐겨찾기 토글
공식 관측지 또는 임의 좌표를 즐겨찾기에 추가/해제합니다.
POST /me/saved-sites/toggle
Authorization: Bearer {accessToken}공식 관측지 즐겨찾기
{
"siteId": 1
}임의 장소 즐겨찾기
{
"name": "내가 찾은 명당",
"latitude": 37.1234,
"longitude": 127.5678
}응답
{
"isSaved": true,
"savedSiteId": 42
}| 필드 | 타입 | 설명 |
|---|---|---|
isSaved | Boolean | 최종 즐겨찾기 상태 (true: 추가, false: 해제) |
savedSiteId | Long? | 즐겨찾기 항목 ID (추가된 경우에만 반환) |
저장된 관측지 목록
GET /me/saved-sites
Authorization: Bearer {accessToken}응답
[
{
"savedSiteId": 42,
"siteId": 1,
"name": "별마로 천문대",
"latitude": 37.1978,
"longitude": 128.4865,
"isCustom": false
},
{
"savedSiteId": 43,
"siteId": null,
"name": "내가 찾은 명당",
"latitude": 37.1234,
"longitude": 127.5678,
"isCustom": true
}
]| 필드 | 타입 | 설명 |
|---|---|---|
savedSiteId | Long | 즐겨찾기 항목 ID |
siteId | Long? | 공식 관측지 ID (isCustom=true이면 null) |
isCustom | Boolean | 임의 저장 여부 |
API 직접 테스트
모든 관측지 조회
Authorization
bearerAuth AuthorizationBearer <token>
In: header
Query Parameters
pageable*
Response Body
*/*
curl -X GET "https://byeoldori-server-hbxnfn4woa-du.a.run.app/observationsites?page=0&size=1&sort=string"{
"totalElements": 0,
"totalPages": 0,
"first": true,
"last": true,
"size": 0,
"content": [
{
"id": 0,
"name": "string",
"latitude": 0.1,
"longitude": 0.1,
"averageScore": 0.1
}
],
"number": 0,
"sort": {
"empty": true,
"sorted": true,
"unsorted": true
},
"numberOfElements": 0,
"pageable": {
"offset": 0,
"sort": {
"empty": true,
"sorted": true,
"unsorted": true
},
"paged": true,
"pageNumber": 0,
"pageSize": 0,
"unpaged": true
},
"empty": true
}관측지 검색
Authorization
bearerAuth AuthorizationBearer <token>
In: header
Query Parameters
keyword*string
Response Body
*/*
curl -X GET "https://byeoldori-server-hbxnfn4woa-du.a.run.app/observationsites/name?keyword=string"[
{
"id": 0,
"name": "string",
"latitude": 0.1,
"longitude": 0.1,
"averageScore": 0.1
}
]관측지 단건 조회(ID)
Authorization
bearerAuth AuthorizationBearer <token>
In: header
Path Parameters
id*integer
Format
int64Response Body
*/*
curl -X GET "https://byeoldori-server-hbxnfn4woa-du.a.run.app/observationsites/0"{
"success": true,
"message": "string",
"data": {
"id": 0,
"name": "string",
"latitude": 0.1,
"longitude": 0.1,
"reviewCount": 0,
"totalLikes": 0,
"averageScore": 0.1
}
}관측지 등록
Authorization
bearerAuth AuthorizationBearer <token>
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
*/*
curl -X POST "https://byeoldori-server-hbxnfn4woa-du.a.run.app/observationsites" \ -H "Content-Type: application/json" \ -d '{ "name": "별마로 천문대", "latitude": 37.1978774787, "longitude": 128.4865953418 }'{
"success": true,
"message": "string",
"data": {
"id": 0,
"name": "string",
"latitude": 0.1,
"longitude": 0.1,
"averageScore": 0.1
}
}관측지 수정 (ID)
Authorization
bearerAuth AuthorizationBearer <token>
In: header
Path Parameters
id*integer
Format
int64Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
*/*
curl -X PUT "https://byeoldori-server-hbxnfn4woa-du.a.run.app/observationsites/0" \ -H "Content-Type: application/json" \ -d '{ "name": "별마로 천문대", "latitude": 37.1978774787, "longitude": 128.4865953418 }'{
"success": true,
"message": "string",
"data": {
"id": 0,
"name": "string",
"latitude": 0.1,
"longitude": 0.1,
"averageScore": 0.1
}
}관측지 삭제 (ID)
Authorization
bearerAuth AuthorizationBearer <token>
In: header
Path Parameters
id*integer
Format
int64Response Body
*/*
curl -X DELETE "https://byeoldori-server-hbxnfn4woa-du.a.run.app/observationsites/0"{
"success": true,
"message": "string",
"data": {}
}curl -X GET "https://byeoldori-server-hbxnfn4woa-du.a.run.app/me/saved-sites"[
{
"savedSiteId": 0,
"siteId": 0,
"name": "string",
"latitude": 0.1,
"longitude": 0.1,
"isCustom": true
}
]즐겨찾기 토글
Authorization
bearerAuth AuthorizationBearer <token>
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
*/*
curl -X POST "https://byeoldori-server-hbxnfn4woa-du.a.run.app/me/saved-sites/toggle" \ -H "Content-Type: application/json" \ -d '{}'{
"success": true,
"message": "string",
"data": {
"isSaved": true,
"savedSiteId": 0
}
}저장된 관측지 상세 조회
Authorization
bearerAuth AuthorizationBearer <token>
In: header
Path Parameters
savedSiteId*integer
Format
int64Response Body
*/*
curl -X GET "https://byeoldori-server-hbxnfn4woa-du.a.run.app/me/saved-sites/0"{
"savedSiteId": 0,
"siteId": 0,
"name": "string",
"latitude": 0.1,
"longitude": 0.1,
"isCustom": true
}관측지 즐겨찾기 삭제
Authorization
bearerAuth AuthorizationBearer <token>
In: header
Path Parameters
savedSiteId*integer
Format
int64Response Body
*/*
curl -X DELETE "https://byeoldori-server-hbxnfn4woa-du.a.run.app/me/saved-sites/0"{
"success": true,
"message": "string",
"data": {}
}