alwaysgood commited on
Commit
23760df
·
verified ·
1 Parent(s): ca1121a

Update api_docs.py

Browse files
Files changed (1) hide show
  1. 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