Spaces:
Sleeping
Sleeping
Update api_docs.py
Browse files- api_docs.py +124 -1
api_docs.py
CHANGED
|
@@ -490,8 +490,131 @@ fetch(url)
|
|
| 490 |
gr.Markdown("")
|
| 491 |
gr.Markdown("### 응답 형식 (Response Format)")
|
| 492 |
|
| 493 |
-
# 성공 응답
|
| 494 |
gr.Markdown("#### **성공 (200 OK)**")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 495 |
response_json = json.dumps(endpoint_info['response_example'], indent=2, ensure_ascii=False)
|
| 496 |
gr.Markdown(f"```json\n{response_json}\n```")
|
| 497 |
|
|
|
|
| 490 |
gr.Markdown("")
|
| 491 |
gr.Markdown("### 응답 형식 (Response Format)")
|
| 492 |
|
| 493 |
+
# 성공 응답 테이블
|
| 494 |
gr.Markdown("#### **성공 (200 OK)**")
|
| 495 |
+
|
| 496 |
+
# 응답 구조를 테이블로 표시
|
| 497 |
+
if endpoint_key == "tide_level":
|
| 498 |
+
# 메타 정보 테이블
|
| 499 |
+
gr.Markdown("##### **Meta 정보**")
|
| 500 |
+
meta_table = "|필드 (Field)|타입 (Type)|설명 (Description)|\n"
|
| 501 |
+
meta_table += "|---|---|---|\n"
|
| 502 |
+
meta_table += "|`success`|`boolean`|요청 성공 여부|\n"
|
| 503 |
+
meta_table += "|`timestamp`|`string`|응답 생성 시간 (ISO 8601 형식)|\n"
|
| 504 |
+
meta_table += "|`meta.obs_post_id`|`string`|관측소 ID (요청한 station_id와 동일)|\n"
|
| 505 |
+
meta_table += "|`meta.obs_post_name`|`string`|관측소 이름|\n"
|
| 506 |
+
meta_table += "|`meta.obs_lat`|`string`|관측소 위도|\n"
|
| 507 |
+
meta_table += "|`meta.obs_lon`|`string`|관측소 경도|\n"
|
| 508 |
+
meta_table += "|`meta.data_type`|`string`|데이터 타입 (prediction/observation)|\n"
|
| 509 |
+
gr.Markdown(meta_table)
|
| 510 |
+
|
| 511 |
+
gr.Markdown("##### **Data 정보**")
|
| 512 |
+
data_table = "|필드 (Field)|타입 (Type)|설명 (Description)|\n"
|
| 513 |
+
data_table += "|---|---|---|\n"
|
| 514 |
+
data_table += "|`data.record_time`|`string`|데이터 기록 시간 (ISO 8601)|\n"
|
| 515 |
+
data_table += "|`data.record_time_kst`|`string`|데이터 기록 시간 (KST 형식)|\n"
|
| 516 |
+
data_table += "|`data.tide_level`|`number`|**예측 조위 높이 (cm)**|\n"
|
| 517 |
+
data_table += "|`data.residual_value`|`number/null`|잔차 예측값|\n"
|
| 518 |
+
data_table += "|`data.harmonic_value`|`number`|조화 예측값|\n"
|
| 519 |
+
data_table += "|`data.data_source`|`string`|데이터 소스 (harmonic_only/combined)|\n"
|
| 520 |
+
data_table += "|`data.confidence`|`string`|예측 신뢰도 (high/medium/low)|\n"
|
| 521 |
+
data_table += "|`data.note`|`string`|추가 설명|\n"
|
| 522 |
+
data_table += "|`data.query_time`|`string`|쿼리 실행 시간|\n"
|
| 523 |
+
data_table += "|`data.matched_time_diff_seconds`|`number`|요청 시간과 데이터 시간 차이(초)|\n"
|
| 524 |
+
gr.Markdown(data_table)
|
| 525 |
+
|
| 526 |
+
elif endpoint_key == "tide_series":
|
| 527 |
+
gr.Markdown("##### **응답 구조**")
|
| 528 |
+
series_table = "|필드 (Field)|타입 (Type)|설명 (Description)|\n"
|
| 529 |
+
series_table += "|---|---|---|\n"
|
| 530 |
+
series_table += "|`success`|`boolean`|요청 성공 여부|\n"
|
| 531 |
+
series_table += "|`meta.obs_post_id`|`string`|관측소 ID|\n"
|
| 532 |
+
series_table += "|`meta.obs_post_name`|`string`|관측소 이름|\n"
|
| 533 |
+
series_table += "|`meta.start_time`|`string`|조회 시작 시간|\n"
|
| 534 |
+
series_table += "|`meta.end_time`|`string`|조회 종료 시간|\n"
|
| 535 |
+
series_table += "|`meta.interval_minutes`|`integer`|데이터 간격(분)|\n"
|
| 536 |
+
series_table += "|`meta.total_records`|`integer`|전체 레코드 수|\n"
|
| 537 |
+
series_table += "|`data.tidal_obs`|`array`|시계열 조위 데이터 배열|\n"
|
| 538 |
+
series_table += "|`data.tidal_obs[].record_time`|`string`|기록 시간|\n"
|
| 539 |
+
series_table += "|`data.tidal_obs[].pred_tide`|`number`|예측 조위(cm)|\n"
|
| 540 |
+
series_table += "|`data.tidal_obs[].harmonic_tide`|`number`|조화 예측값|\n"
|
| 541 |
+
series_table += "|`data.tidal_obs[].residual_tide`|`number/null`|잔차 예측값|\n"
|
| 542 |
+
gr.Markdown(series_table)
|
| 543 |
+
|
| 544 |
+
elif endpoint_key == "extremes":
|
| 545 |
+
gr.Markdown("##### **응답 구조**")
|
| 546 |
+
extremes_table = "|필드 (Field)|타입 (Type)|설명 (Description)|\n"
|
| 547 |
+
extremes_table += "|---|---|---|\n"
|
| 548 |
+
extremes_table += "|`success`|`boolean`|요청 성공 여부|\n"
|
| 549 |
+
extremes_table += "|`meta.obs_post_id`|`string`|관측소 ID|\n"
|
| 550 |
+
extremes_table += "|`meta.obs_post_name`|`string`|관측소 이름|\n"
|
| 551 |
+
extremes_table += "|`meta.date`|`string`|조회 날짜|\n"
|
| 552 |
+
extremes_table += "|`meta.include_secondary`|`boolean`|부차 만조/간조 포함 여부|\n"
|
| 553 |
+
extremes_table += "|`data.high_tides`|`array`|만조 정보 배열|\n"
|
| 554 |
+
extremes_table += "|`data.high_tides[].time`|`string`|만조 시간|\n"
|
| 555 |
+
extremes_table += "|`data.high_tides[].level`|`number`|만조 높이(cm)|\n"
|
| 556 |
+
extremes_table += "|`data.high_tides[].type`|`string`|만조 타입 (primary/secondary)|\n"
|
| 557 |
+
extremes_table += "|`data.low_tides`|`array`|간조 정보 배열|\n"
|
| 558 |
+
extremes_table += "|`data.low_tides[].time`|`string`|간조 시간|\n"
|
| 559 |
+
extremes_table += "|`data.low_tides[].level`|`number`|간조 높이(cm)|\n"
|
| 560 |
+
extremes_table += "|`data.low_tides[].type`|`string`|간조 타입 (primary/secondary)|\n"
|
| 561 |
+
gr.Markdown(extremes_table)
|
| 562 |
+
|
| 563 |
+
elif endpoint_key == "alert":
|
| 564 |
+
gr.Markdown("##### **응답 구조**")
|
| 565 |
+
alert_table = "|필드 (Field)|타입 (Type)|설명 (Description)|\n"
|
| 566 |
+
alert_table += "|---|---|---|\n"
|
| 567 |
+
alert_table += "|`success`|`boolean`|요청 성공 여부|\n"
|
| 568 |
+
alert_table += "|`meta.obs_post_id`|`string`|관측소 ID|\n"
|
| 569 |
+
alert_table += "|`meta.obs_post_name`|`string`|관측소 이름|\n"
|
| 570 |
+
alert_table += "|`meta.check_period.start`|`string`|확인 시작 시간|\n"
|
| 571 |
+
alert_table += "|`meta.check_period.end`|`string`|확인 종료 시간|\n"
|
| 572 |
+
alert_table += "|`meta.warning_level`|`number`|주의 수위(cm)|\n"
|
| 573 |
+
alert_table += "|`meta.danger_level`|`number`|경고 수위(cm)|\n"
|
| 574 |
+
alert_table += "|`data.alert_status`|`string`|경보 상태 (SAFE/WARNING/DANGER)|\n"
|
| 575 |
+
alert_table += "|`data.max_level`|`number`|기간 중 최고 수위|\n"
|
| 576 |
+
alert_table += "|`data.max_level_time`|`string`|최고 수위 시간|\n"
|
| 577 |
+
alert_table += "|`data.warning_events`|`array`|주의 수위 초과 이벤트|\n"
|
| 578 |
+
alert_table += "|`data.danger_events`|`array`|경고 수위 초과 이벤트|\n"
|
| 579 |
+
alert_table += "|`data.recommendation`|`string`|권고 사항|\n"
|
| 580 |
+
gr.Markdown(alert_table)
|
| 581 |
+
|
| 582 |
+
elif endpoint_key == "compare":
|
| 583 |
+
gr.Markdown("##### **응답 구조**")
|
| 584 |
+
compare_table = "|필드 (Field)|타입 (Type)|설명 (Description)|\n"
|
| 585 |
+
compare_table += "|---|---|---|\n"
|
| 586 |
+
compare_table += "|`success`|`boolean`|요청 성공 여부|\n"
|
| 587 |
+
compare_table += "|`meta.target_time`|`string`|비교 시간|\n"
|
| 588 |
+
compare_table += "|`meta.station_count`|`integer`|비교 관측소 수|\n"
|
| 589 |
+
compare_table += "|`data.comparisons`|`array`|관측소별 조위 정보 배열|\n"
|
| 590 |
+
compare_table += "|`data.comparisons[].station_id`|`string`|관측소 ID|\n"
|
| 591 |
+
compare_table += "|`data.comparisons[].station_name`|`string`|관측소 이름|\n"
|
| 592 |
+
compare_table += "|`data.comparisons[].tide_level`|`number`|조위 높이(cm)|\n"
|
| 593 |
+
compare_table += "|`data.comparisons[].data_time`|`string`|데이터 시간|\n"
|
| 594 |
+
compare_table += "|`data.statistics.max_level`|`number`|최고 조위|\n"
|
| 595 |
+
compare_table += "|`data.statistics.max_station`|`string`|최고 조위 관측소|\n"
|
| 596 |
+
compare_table += "|`data.statistics.min_level`|`number`|최저 조위|\n"
|
| 597 |
+
compare_table += "|`data.statistics.min_station`|`string`|최저 조위 관측소|\n"
|
| 598 |
+
compare_table += "|`data.statistics.avg_level`|`number`|평균 조위|\n"
|
| 599 |
+
gr.Markdown(compare_table)
|
| 600 |
+
|
| 601 |
+
elif endpoint_key == "health":
|
| 602 |
+
gr.Markdown("##### **응답 구조**")
|
| 603 |
+
health_table = "|필드 (Field)|타입 (Type)|설명 (Description)|\n"
|
| 604 |
+
health_table += "|---|---|---|\n"
|
| 605 |
+
health_table += "|`success`|`boolean`|요청 성공 여부|\n"
|
| 606 |
+
health_table += "|`timestamp`|`string`|응답 시간|\n"
|
| 607 |
+
health_table += "|`status`|`string`|시스템 상태 (healthy/degraded/error)|\n"
|
| 608 |
+
health_table += "|`services.api_server`|`string`|API 서버 상태|\n"
|
| 609 |
+
health_table += "|`services.supabase`|`string`|Supabase 연결 상태|\n"
|
| 610 |
+
health_table += "|`services.gemini_api`|`string`|Gemini API 상태|\n"
|
| 611 |
+
health_table += "|`services.predictions`|`string`|예측 서비스 상태|\n"
|
| 612 |
+
health_table += "|`uptime`|`string`|서비스 가동 시간|\n"
|
| 613 |
+
health_table += "|`version`|`string`|API 버전|\n"
|
| 614 |
+
gr.Markdown(health_table)
|
| 615 |
+
|
| 616 |
+
# 응답 예시 (JSON)
|
| 617 |
+
gr.Markdown("##### **응답 예시**")
|
| 618 |
response_json = json.dumps(endpoint_info['response_example'], indent=2, ensure_ascii=False)
|
| 619 |
gr.Markdown(f"```json\n{response_json}\n```")
|
| 620 |
|