From 4bb99c3bb880a9f55cd7410c790a891d2d10d1db Mon Sep 17 00:00:00 2001 From: Feynman Date: Tue, 3 Feb 2026 16:59:46 +0800 Subject: [PATCH] refactor(api-client): update fetchApiServerToken to return complete data object; enhance template handling in Debug.vue and template.ts --- packages/api/src/core/api-client.ts | 2 +- .../business/src/views/data-server/Debug.vue | 2 +- .../src/views/data-server/template.ts | 211 ++++++++++++++---- 3 files changed, 173 insertions(+), 42 deletions(-) diff --git a/packages/api/src/core/api-client.ts b/packages/api/src/core/api-client.ts index 024d30ba37..def91d72cf 100644 --- a/packages/api/src/core/api-client.ts +++ b/packages/api/src/core/api-client.ts @@ -65,7 +65,7 @@ export async function fetchApiServerToken() { debug: 'true', }, }) - return result?.data?.access_token || '' + return result?.data || {} } export function fetchApisByClient(clientId: string) { diff --git a/packages/business/src/views/data-server/Debug.vue b/packages/business/src/views/data-server/Debug.vue index 4fb8d35c16..a2fa7f4172 100644 --- a/packages/business/src/views/data-server/Debug.vue +++ b/packages/business/src/views/data-server/Debug.vue @@ -103,7 +103,7 @@ const getAPIServerToken = async ( const reflshToken = () => { return getAPIServerToken((token: Record) => { - templates.value = getTemplate(props.host + form.value.path, token) + templates.value = getTemplate({ urlList: props.urlList, token }) }) } diff --git a/packages/business/src/views/data-server/template.ts b/packages/business/src/views/data-server/template.ts index 0cbf5f9a48..1151684ab4 100644 --- a/packages/business/src/views/data-server/template.ts +++ b/packages/business/src/views/data-server/template.ts @@ -1,19 +1,60 @@ -export default function (url, token) { +interface UrlItem { + method: string + url: string + last?: string + canEdit?: boolean + type?: string +} + +interface TemplateParams { + urlList: UrlItem[] + token: Record +} + +export default function ({ urlList, token }: TemplateParams) { + // Extract URLs from urlList + const getUrl = + urlList.find((item) => item.method === 'GET')?.url || + urlList.find((item) => item.type === 'DEFAULT_GET')?.url || + '' + const postUrlItem = urlList.find( + (item) => item.method === 'POST' || item.type === 'DEFAULT_POST', + ) + const postUrl = postUrlItem ? postUrlItem.url + (postUrlItem.last || '') : '' + const tokenUrl = urlList.find((item) => item.method === 'TOKEN')?.url || '' + const accessToken = token?.access_token || '' + const javaTemplate = `public static void main(String[] args) { - String url = "{{url}}"; - String access_token = "{{access_token}}"; + // Token URL (OAuth2) + String tokenUrl = "${tokenUrl}"; + + // GET request URL + String getUrl = "${getUrl}"; + + // POST request URL + String postUrl = "${postUrl}"; + + // Access token (obtained from token endpoint) + String access_token = "${accessToken}"; + String param = ""; - String result1 = doGet(url, access_token, param); + + // GET request example + String result1 = doGet(getUrl, access_token, param); System.out.println(result1); - String result2 = doPost(url+"/find", access_token, param); + + // POST request example + String result2 = doPost(postUrl, access_token, param); System.out.println(result2); } - + public static String doGet(String url, String access_token, String param) { try (CloseableHttpClient httpClient = HttpClients.createDefault()) { StringBuilder urlBuilder = new StringBuilder(url); urlBuilder.append("?access_token=").append(access_token); - urlBuilder.append("&filter=").append(URLEncoder.encode(param, StandardCharsets.UTF_8.name())); + if (param != null && !param.isEmpty()) { + urlBuilder.append("&filter=").append(URLEncoder.encode(param, StandardCharsets.UTF_8.name())); + } HttpGet httpGet = new HttpGet(urlBuilder.toString()); RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000) .setConnectionRequestTimeout(5000) @@ -35,7 +76,7 @@ public static String doGet(String url, String access_token, String param) { throw new RuntimeException(e); } } - + public static String doPost(String url, String access_token, String reqBody) { try (CloseableHttpClient httpClient = HttpClients.createDefault()) { StringBuilder urlBuilder = new StringBuilder(url); @@ -48,7 +89,6 @@ public static String doPost(String url, String access_token, String reqBody) { httpPost.setConfig(requestConfig); httpPost.setEntity(new StringEntity(reqBody, Charset.defaultCharset())); - CloseableHttpResponse response = httpClient.execute(httpPost); StatusLine statusLine = response.getStatusLine(); HttpEntity entity = response.getEntity(); @@ -60,51 +100,142 @@ public static String doPost(String url, String access_token, String reqBody) { } catch (IOException e) { throw new RuntimeException(e); } +} + +// Get access token from OAuth2 token endpoint +public static String getAccessToken(String tokenUrl, String clientId, String clientSecret) { + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpPost httpPost = new HttpPost(tokenUrl); + httpPost.setHeader("content-type", "application/x-www-form-urlencoded"); + + List params = new ArrayList<>(); + params.add(new BasicNameValuePair("grant_type", "client_credentials")); + params.add(new BasicNameValuePair("client_id", clientId)); + params.add(new BasicNameValuePair("client_secret", clientSecret)); + httpPost.setEntity(new UrlEncodedFormEntity(params)); + + CloseableHttpResponse response = httpClient.execute(httpPost); + HttpEntity entity = response.getEntity(); + if (entity != null) { + String result = EntityUtils.toString(entity, CharEncoding.UTF_8); + // Parse JSON to get access_token + // JSONObject json = new JSONObject(result); + // return json.getString("access_token"); + return result; + } + throw new RuntimeException("Failed to get access token"); + } catch (IOException e) { + throw new RuntimeException(e); + } }` - .replace('{{url}}', url) - .replace('{{access_token}}', token) + const jsTemplate = `import fetch from 'node-fetch'; -async function get(url){ - const response = await fetch(url); + +// Token URL (OAuth2) +const tokenUrl = '${tokenUrl}'; + +// GET request URL +const getUrl = '${getUrl}'; + +// POST request URL +const postUrl = '${postUrl}'; + +// Current access token +const access_token = '${accessToken}'; + +// Get access token from OAuth2 token endpoint +async function getAccessToken(clientId, clientSecret) { + const response = await fetch(tokenUrl, { + method: 'POST', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + body: new URLSearchParams({ + grant_type: 'client_credentials', + client_id: clientId, + client_secret: clientSecret + }) + }); + const data = await response.json(); + return data.access_token; +} + +// GET request +async function get(url, token) { + const response = await fetch(url + '?access_token=' + token); const data = await response.json(); return data; } -async function post(url,body){ - const response = await fetch(url,{ - method: 'post', + +// POST request +async function post(url, token, body) { + const response = await fetch(url + '?access_token=' + token, { + method: 'POST', body: JSON.stringify(body), - headers: {'Content-Type': 'application/json'} + headers: { 'Content-Type': 'application/json' } }); const data = await response.json(); return data; } -const url = '{{url}}'; -const access_token = '{{access_token}}'; -get(url + '?access_token='+access_token).then(data=>{ - console.info(data) -}).catch(err=>{ - console.error(err) -}) -post(url + '/find?access_token='+access_token,{}).then(data=>{ - console.info(data) -}).catch(err=>{ - console.error(err) -})` - .replace('{{url}}', url) - .replace('{{access_token}}', token) + +// Example: GET request +get(getUrl, access_token).then(data => { + console.info('GET result:', data); +}).catch(err => { + console.error('GET error:', err); +}); + +// Example: POST request +post(postUrl, access_token, { page: 1, limit: 20 }).then(data => { + console.info('POST result:', data); +}).catch(err => { + console.error('POST error:', err); +}); + +// Example: Get new token and make request +// getAccessToken('your_client_id', 'your_client_secret').then(token => { +// return get(getUrl, token); +// }).then(data => { +// console.info('Result with new token:', data); +// });` + const pythonTemplate = `import requests -url = "{{url}}" -access_token = "{{access_token}}"; -param = {} # for example: param={'page':1,'limit':20} +# Token URL (OAuth2) +token_url = "${tokenUrl}" + +# GET request URL +get_url = "${getUrl}" + +# POST request URL +post_url = "${postUrl}" + +# Current access token +access_token = "${accessToken}" + +# Get access token from OAuth2 token endpoint +def get_access_token(client_id, client_secret): + response = requests.post(token_url, data={ + 'grant_type': 'client_credentials', + 'client_id': client_id, + 'client_secret': client_secret + }) + return response.json().get('access_token') + +# GET request example +params = {'page': 1, 'limit': 20} # Optional query parameters headers = {'access_token': access_token} +result1 = requests.get(get_url, params=params, headers=headers) +print('GET result:', result1.text) + +# POST request example +body = {'page': 1, 'limit': 20} +result2 = requests.post(post_url + '?access_token=' + access_token, json=body) +print('POST result:', result2.text) + +# Example: Get new token and make request +# new_token = get_access_token('your_client_id', 'your_client_secret') +# result = requests.get(get_url, headers={'access_token': new_token}) +# print('Result with new token:', result.text)` -result1 = requests.get(url, params=param, headers=headers) -print(result1.text) -result2 = requests.post(url + "/find", json=param, headers=headers) -print(result2.text)` - .replace('{{url}}', url) - .replace('{{access_token}}', token) return { java: javaTemplate, javascript: jsTemplate,