Spaces:
Running
Running
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 |
|