import $ from 'jquery' let apiSpec = null async function loadApiSpec() { try { const response = await fetch('/api.spec.json', { method: 'GET', headers: { 'Cache-Control': 'no-cache', 'Accept': 'application/json' } }) if (!response.ok) { throw new Error(`HTTP ${response.status}: ${response.statusText}`) } apiSpec = await response.json() console.log('API Spec loaded:', apiSpec) return apiSpec } catch (error) { console.error('Ошибка загрузки API спецификации:', error) $('#result').text('Ошибка загрузки API спецификации: ' + error.message) } } function populateServices() { const $serviceSelect = $('#service') $serviceSelect.empty() $serviceSelect.append('') Object.keys(apiSpec).forEach(serviceName => { $serviceSelect.append(``) }) } function populateMethods(serviceName) { const $methodSelect = $('#method') $methodSelect.empty() $methodSelect.append('') if (serviceName && apiSpec[serviceName] && apiSpec[serviceName].methods) { apiSpec[serviceName].methods.forEach(method => { $methodSelect.append(``) }) } } function createParamInputs(methodName, serviceName) { const $paramsContainer = $('#params-container') $paramsContainer.empty() if (!serviceName || !methodName) return const service = apiSpec[serviceName] if (!service || !service.methods) return const method = service.methods.find(m => m.name === methodName) if (!method || !method.params) return method.params.forEach(param => { const required = !param.optional ? ' (обязательно)' : '' const $paramDiv = $(`
`) $paramsContainer.append($paramDiv) }) } async function sendRequest() { const serviceName = $('#service').val() const methodName = $('#method').val() if (!serviceName || !methodName) { $('#result').text('Выберите сервис и метод') return } const params = {} $('.param input').each(function() { const paramName = $(this).data('param') const value = $(this).val() if (value.trim() !== '') { params[paramName] = value } }) const requestData = { jsonrpc: '2.0', method: `${serviceName}.${methodName}`, params: params, id: Date.now() } $('#result').text('Отправка запроса...') try { const response = await fetch('/api', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(requestData) }) const result = await response.json() $('#result').text(JSON.stringify(result, null, 2)) } catch (error) { $('#result').text(`Ошибка: ${error.message}`) } } $(document).ready(async () => { await loadApiSpec() if (apiSpec) { populateServices() $('#service').on('change', function() { const serviceName = $(this).val() populateMethods(serviceName) $('#params-container').empty() }) $('#method').on('change', function() { const serviceName = $('#service').val() const methodName = $(this).val() createParamInputs(methodName, serviceName) }) $('#send-btn').on('click', sendRequest) } })