import {Plus, Send, Trash2} from 'lucide-react'; import {FormEvent, useMemo, useState} from 'react'; import {debugAdminHttp} from '../api/adminApiClient'; import type { AdminDebugHeaderInput, AdminDebugHttpMethod, AdminDebugHttpResponse, } from '../api/adminApiTypes'; import {formatUnknownJson, handlePageError} from './pageUtils'; interface AdminDebugHttpPageProps { token: string; onUnauthorized: (message?: string) => void; } const httpMethods: AdminDebugHttpMethod[] = [ 'GET', 'POST', 'PUT', 'PATCH', 'DELETE', ]; export function AdminDebugHttpPage({ token, onUnauthorized, }: AdminDebugHttpPageProps) { const [method, setMethod] = useState('GET'); const [path, setPath] = useState('/healthz'); const [body, setBody] = useState(''); const [headers, setHeaders] = useState([]); const [result, setResult] = useState(null); const [errorMessage, setErrorMessage] = useState(''); const [isSubmitting, setIsSubmitting] = useState(false); const jsonPreview = useMemo( () => formatUnknownJson(result?.bodyJson), [result?.bodyJson], ); async function handleSubmit(event: FormEvent) { event.preventDefault(); if (isSubmitting) { return; } setErrorMessage(''); setIsSubmitting(true); try { const response = await debugAdminHttp(token, { method, path: path.trim(), headers: headers.filter((header) => header.name.trim()), body, }); setResult(response); } catch (error: unknown) { handlePageError(error, onUnauthorized, setErrorMessage); } finally { setIsSubmitting(false); } } return (

API 调试

受控同源请求

Headers
{headers.map((header, index) => (
setHeaders((current) => current.map((item, itemIndex) => itemIndex === index ? {...item, name: event.target.value} : item, ), ) } /> setHeaders((current) => current.map((item, itemIndex) => itemIndex === index ? {...item, value: event.target.value} : item, ), ) } />
))}