From 1cd200bcc1d0e87d7edd8cf368c7fe35bd3e08ed Mon Sep 17 00:00:00 2001 From: engigu Date: Sun, 14 Jan 2024 13:43:17 +0800 Subject: [PATCH] =?UTF-8?q?feat=C3=AF=C2=BC=20add=20more=20api=20doc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/constant.js | 14 +- web/src/util/viewApi.js | 160 +++++++++++++++++- .../sendTasks/view/viewTaskAPIPopUp.vue | 21 ++- 3 files changed, 183 insertions(+), 12 deletions(-) diff --git a/web/src/constant.js b/web/src/constant.js index 504a3c8..da45541 100644 --- a/web/src/constant.js +++ b/web/src/constant.js @@ -1,3 +1,6 @@ +import { ApiStrGenerate } from "@/util/viewApi.js"; + + // 定义一些常量名 const CONSTANT = { PAGE: 1, @@ -66,10 +69,19 @@ const CONSTANT = { }, ], LOGO: ``, - + API_VIEW_DATA: [ + { label: "curl", class: "language-shell line-numbers", code: "", func: ApiStrGenerate.getCurlString }, + { label: "python", class: "language-python line-numbers", code: "", func: ApiStrGenerate.getPythonString }, + { label: "go", class: "language-go line-numbers", code: "", func: ApiStrGenerate.getGolangString }, + { label: "java", class: "language-java line-numbers", code: "", func: ApiStrGenerate.getJaveString }, + { label: "rust", class: "language-rust line-numbers", code: "", func: ApiStrGenerate.getRustString }, + { label: "php", class: "language-php line-numbers", code: "", func: ApiStrGenerate.getPHPString }, + { label: "node", class: "language-javascript line-numbers", code: "", func: ApiStrGenerate.getNodeString }, + ], } +// 转换渠道map CONSTANT.WAYS_DATA_MAP = {}; CONSTANT.WAYS_DATA.forEach(element => { CONSTANT.WAYS_DATA_MAP[element.type] = element diff --git a/web/src/util/viewApi.js b/web/src/util/viewApi.js index b353518..9a19643 100644 --- a/web/src/util/viewApi.js +++ b/web/src/util/viewApi.js @@ -6,24 +6,176 @@ const gethttpOrigin = () => { class ApiStrGenerate { - - static getCurlString(task_id, options) { + static getDataString(task_id, options) { let data = { task_id: task_id }; data.title = 'message title'; data.text = 'Hello World!'; - if (options.html ) { + if (options.html) { data.html = '

Hello World!

'; } - if (options.markdown ) { + if (options.markdown) { data.markdown = '**Hello World!**'; } let dataStr = JSON.stringify(data, null, 4); + return dataStr + } + + static getCurlString(task_id, options) { + let dataStr = ApiStrGenerate.getDataString(task_id, options); let example = `curl -X POST --location '${gethttpOrigin()}/api/v1/message/send' \\ --header 'Content-Type: application/json' \\ --data '${dataStr}'`; return example; } + static getGolangString(task_id, options) { + let dataStr = ApiStrGenerate.getDataString(task_id, options); + let example = `package main + +import ( + "fmt" + "io" + "log" + "net/http" + "strings" +) + +func main() { + client := &http.Client{} + var data = strings.NewReader(\`${dataStr}\`) + req, err := http.NewRequest("POST", "${gethttpOrigin()}/api/v1/message/send", data) + if err != nil { + log.Fatal(err) + } + req.Header.Set("Content-Type", "application/json") + resp, err := client.Do(req) + if err != nil { + log.Fatal(err) + } + defer resp.Body.Close() + bodyText, err := io.ReadAll(resp.Body) + if err != nil { + log.Fatal(err) + } + fmt.Printf("%s\\n", bodyText) +} + `; + return example; + } + + static getPythonString(task_id, options) { + let dataStr = ApiStrGenerate.getDataString(task_id, options); + let example = `import requests + +headers = { + 'Content-Type': 'application/json', +} +json_data = ${dataStr} +response = requests.post('${gethttpOrigin()}/api/v1/message/send', headers=headers, json=json_data) + +print("response:", response.json()) +`; + return example; + } + + static getJaveString(task_id, options) { + let dataStr = ApiStrGenerate.getDataString(task_id, options); + let example = `import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse; + +HttpClient client = HttpClient.newBuilder() + .followRedirects(HttpClient.Redirect.NORMAL) + .build(); + +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("${gethttpOrigin()}/api/v1/message/send")) + .POST(BodyPublishers.ofString(${JSON.stringify(dataStr).trim('\"')})) + .setHeader("Content-Type", "application/json") + .build(); + +HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); +`; + return example; + } + + static getRustString(task_id, options) { + let dataStr = ApiStrGenerate.getDataString(task_id, options); + let example = `extern crate reqwest; +use reqwest::header; + +fn main() -> Result<(), Box> { + let mut headers = header::HeaderMap::new(); + headers.insert("Content-Type", "application/json".parse().unwrap()); + + let client = reqwest::blocking::Client::new(); + let res = client.post("${gethttpOrigin()}/api/v1/message/send") + .headers(headers) + .body(r#" +${dataStr} +"# + ) + .send()? + .text()?; + println!("{}", res); + + Ok(()) +} +`; + return example; + } + + static getPHPString(task_id, options) { + let dataStr = ApiStrGenerate.getDataString(task_id, options); + let example = ` - -
{{ currCode }}
+ +
{{ item.code }}
@@ -38,9 +38,10 @@ import { defineComponent, onMounted, watch, reactive, toRefs, onUpdated } from ' import { _ } from 'lodash'; import { usePageState } from '@/store/page_sate.js'; import Prism from "prismjs"; -import { ApiStrGenerate } from "@/util/viewApi.js"; import { QuestionFilled } from '@element-plus/icons-vue' import { request } from '@/api/api' +import { CONSTANT } from '@/constant' + export default defineComponent({ components: { @@ -54,8 +55,9 @@ export default defineComponent({ const state = reactive({ isShow: false, currCode: '', + currOption: '', activeName: 'curl', - language: "python", + apiViewData: CONSTANT.API_VIEW_DATA, }); watch(pageState.ShowDialogData, (newValue, oldValue) => { @@ -84,12 +86,17 @@ export default defineComponent({ return viewOptions } + // 渲染api接口代码 const renderApiString = async () => { let task_id = pageState.ShowDialogData[props.componentName].rowData.id; - let options = await getViewOptions(task_id) - if (state.activeName == 'curl') { - state.currCode = ApiStrGenerate.getCurlString(task_id, options); + if (!state.currOption) { + state.currOption = await getViewOptions(task_id); } + state.apiViewData.forEach(element => { + if (!element.code) { + element.code = element.func(task_id, state.currOption); + } + }); setTimeout(() => { Prism.highlightAll() }, 100)