Skip to content

Commit b9d7756

Browse files
committed
feat: support online openapi.json
1 parent b89a023 commit b9d7756

File tree

16 files changed

+63
-57
lines changed

16 files changed

+63
-57
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ docker run -d -p 8080:8080 --restart=unless-stopped --name lessapi-duckduckgo le
3939

4040
### OpenAPI Standard Documentation (Swagger 3.0)
4141

42-
[OpenAPI Standard Documentation (Swagger 3.0)](./lessapi-duckduckgo.openapi.json)
42+
[OpenAPI Standard Documentation (Swagger 3.0)](resource/openapi.json)
4343

4444
### Text Search `GET /search/text`
4545

docs/de/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Einfach, leicht, zuverlässig, Docker-Deployment, einfach zu warten.
3434

3535
### OpenAPI-Standarddokument (Swagger 3.0)
3636

37-
[OpenAPI-Standarddokument (Swagger 3.0)](./../../lessapi-duckduckgo.openapi.json)
37+
[OpenAPI-Standarddokument (Swagger 3.0)](../../resource/openapi.json)
3838

3939
### Textsuche `GET /search/text`
4040

docs/es/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Es simple, ligero, confiable, se puede desplegar con Docker y fácil de mantener
3535

3636
### Documento estándar OpenAPI (Swagger 3.0)
3737

38-
[Documento estándar OpenAPI (Swagger 3.0)](./../../lessapi-duckduckgo.openapi.json)
38+
[Documento estándar OpenAPI (Swagger 3.0)](../../resource/openapi.json)
3939

4040
### Búsqueda de texto `GET /search/text`
4141

docs/fr/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Simple, léger, fiable, déployable via Docker, facile à maintenir.
3434

3535
### Documentation OpenAPI (Swagger 3.0)
3636

37-
[Documentation OpenAPI (Swagger 3.0)](./../../lessapi-duckduckgo.openapi.json)
37+
[Documentation OpenAPI (Swagger 3.0)](../../resource/openapi.json)
3838

3939
### Recherche texte `GET /search/text`
4040

docs/it/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ offre un'interfaccia API semplice, leggera e affidabile, ed è facilmente manten
3333

3434
### Documento OpenAPI standard (Swagger 3.0)
3535

36-
[Documento OpenAPI standard (Swagger 3.0)](./../../lessapi-duckduckgo.openapi.json)
36+
[Documento OpenAPI standard (Swagger 3.0)](../../resource/openapi.json)
3737

3838
### Ricerca testuale `GET /search/text`
3939

docs/ja/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ playwright と DuckDuckGo 検索エンジンを基に、単純なAPIインター
3333

3434
### OpenAPI標準ドキュメント (Swagger 3.0)
3535

36-
[OpenAPI標準ドキュメント (Swagger 3.0)](./../../lessapi-duckduckgo.openapi.json)
36+
[OpenAPI標準ドキュメント (Swagger 3.0)](../../resource/openapi.json)
3737

3838
### テキスト検索 `GET /search/text`
3939

docs/ko/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ LessAPI-DuckDuckGo는 DuckDuckGo 검색 엔진을 기반으로 하는 간단한
3232

3333
### OpenAPI 표준 문서 (Swagger 3.0)
3434

35-
[OpenAPI 표준 문서 (Swagger 3.0)](./../../lessapi-duckduckgo.openapi.json)
35+
[OpenAPI 표준 문서 (Swagger 3.0)](../../resource/openapi.json)
3636

3737
### 텍스트 검색 `GET /search/text`
3838

docs/pt/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Simples, leve, confiável, implantado com Docker, fácil de manter.
3434

3535
### Documento padrão OpenAPI (Swagger 3.0)
3636

37-
[Documento padrão OpenAPI (Swagger 3.0)](./../../lessapi-duckduckgo.openapi.json)
37+
[Documento padrão OpenAPI (Swagger 3.0)](../../resource/openapi.json)
3838

3939
### Pesquisa de texto `GET /search/text`
4040

docs/ru/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ LessAPI-DuckDuckGo является сервисом API поисковой си
3434

3535
### OpenAPI стандартный документ (Swagger 3.0)
3636

37-
[OpenAPI стандартный документ (Swagger 3.0)](./../../lessapi-duckduckgo.openapi.json)
37+
[OpenAPI стандартный документ (Swagger 3.0)](../../resource/openapi.json)
3838

3939
### Текстовый поиск `GET /search/text`
4040

docs/zhs/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ docker run -d -p 8080:8080 --restart=unless-stopped --name lessapi-duckduckgo le
4242

4343
### OpenAPI标准文档 (Swagger 3.0)
4444

45-
[OpenAPI标准文档 (Swagger 3.0)](./../../lessapi-duckduckgo.openapi.json)
45+
[OpenAPI标准文档 (Swagger 3.0)](../../resource/openapi.json)
4646

4747
### 文本搜索 `GET /search/text`
4848

docs/zht/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ LessAPI-DuckDuckGo 是一個搜索引擎API服務。
3535

3636
### OpenAPI標準文檔 (Swagger 3.0)
3737

38-
[OpenAPI標準文檔 (Swagger 3.0)](./../../lessapi-duckduckgo.openapi.json)
38+
[OpenAPI標準文檔 (Swagger 3.0)](../../resource/openapi.json)
3939

4040
### 文本搜索 `GET /search/text`
4141

internal/handles/openapi_handle.go

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package handles
2+
3+
import (
4+
"encoding/json"
5+
"github.com/gin-gonic/gin"
6+
"github.com/lessapidev/lessapi-duckduckgo/internal/utils"
7+
)
8+
9+
// OpenAPIHandle handle OpenAPI request
10+
func OpenAPIHandle(c *gin.Context) {
11+
// Read OpenAPI file from resources
12+
jsonRaw, err := utils.ReadLocalFile("./resource/openapi.json")
13+
if err != nil {
14+
c.JSON(200, utils.BuildApiError("read_openapi_error", err.Error()))
15+
return
16+
}
17+
// Parse JSON & Rewrite "servers" field to point to the current server
18+
jsonObj := map[string]interface{}{}
19+
if err := json.Unmarshal([]byte(jsonRaw), &jsonObj); err != nil {
20+
c.JSON(200, utils.BuildApiError("parse_openapi_error", err.Error()))
21+
return
22+
}
23+
jsonObj["servers"] = []map[string]string{}
24+
jsonObj["servers"] = append(jsonObj["servers"].([]map[string]string), map[string]string{
25+
"url": "http://" + c.Request.Host,
26+
"description": "LessAPI DuckDuckGo API Server",
27+
})
28+
// Return OpenAPI JSON
29+
c.JSON(200, jsonObj)
30+
}

internal/searchs/browser_support.go

+2-21
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ package searchs
22

33
import (
44
"fmt"
5-
"io"
6-
"os"
7-
5+
"github.com/lessapidev/lessapi-duckduckgo/internal/utils"
86
"github.com/playwright-community/playwright-go"
97
)
108

@@ -53,7 +51,7 @@ func NewBrowserContextWithOptions(opt BrowserOptions) (playwright.BrowserContext
5351

5452
// add init stealth.min.js
5553
if opt.EnableStealthJs != nil && *opt.EnableStealthJs {
56-
stealthJs, err := readLocalFile("./resource/stealth.min.js")
54+
stealthJs, err := utils.ReadLocalFile("./resource/stealth.min.js")
5755
if err != nil {
5856
return nil, nil, fmt.Errorf("could not read stealth.min.js: %w", err)
5957
}
@@ -79,20 +77,3 @@ func NewBrowserContextWithOptions(opt BrowserOptions) (playwright.BrowserContext
7977
return context, closeHandler, nil
8078

8179
}
82-
83-
// TODO move to utils
84-
func readLocalFile(filename string) (string, error) {
85-
file, err := os.Open(filename)
86-
if err != nil {
87-
return "", err
88-
}
89-
defer func() {
90-
_ = file.Close()
91-
}()
92-
93-
data, err := io.ReadAll(file)
94-
if err != nil {
95-
return "", err
96-
}
97-
return string(data), nil
98-
}

internal/server.go

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ func Run() {
1414
r := gin.Default()
1515

1616
r.GET("/", handles.IndexHandle)
17+
r.GET("/openapi/openapi.json", handles.OpenAPIHandle)
1718
r.GET("/search/text", handles.SearchTextHandle)
1819

1920
err := r.Run(":8080")

internal/utils/utils.go

+18
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package utils
22

33
import (
44
"github.com/gin-gonic/gin"
5+
"io"
6+
"os"
57

68
"github.com/lessapidev/lessapi-duckduckgo/internal/types"
79
)
@@ -29,3 +31,19 @@ func BuildApiError(errCode string, errorMessage string) *types.ApiResponse[any]
2931
Message: &errorMessage,
3032
}
3133
}
34+
35+
func ReadLocalFile(filename string) (string, error) {
36+
file, err := os.Open(filename)
37+
if err != nil {
38+
return "", err
39+
}
40+
defer func() {
41+
_ = file.Close()
42+
}()
43+
44+
data, err := io.ReadAll(file)
45+
if err != nil {
46+
return "", err
47+
}
48+
return string(data), nil
49+
}

lessapi-duckduckgo.openapi.json renamed to resource/openapi.json

+1-25
Original file line numberDiff line numberDiff line change
@@ -68,29 +68,6 @@
6868
"application/json": {
6969
"schema": {
7070
"type": "object",
71-
"x-apifox-refs": {
72-
"01HVH2M9Y2VJ96NS0EN2B0929X": {
73-
"$ref": "#/components/schemas/ApiResponse",
74-
"x-apifox-overrides": {
75-
"data": {
76-
"type": "object",
77-
"properties": {
78-
"results": {
79-
"type": "array",
80-
"items": {
81-
"$ref": "#/components/schemas/SearchTextResultItem"
82-
},
83-
"description": "search result items"
84-
}
85-
},
86-
"description": "success data",
87-
"required": [
88-
"results"
89-
]
90-
}
91-
}
92-
}
93-
},
9471
"properties": {
9572
"code": {
9673
"type": "string",
@@ -196,8 +173,7 @@
196173
}
197174
}
198175
}
199-
},
200-
"x-run-in-apifox'": "https://www.apifox.cn/web/project/4335091/apis/api-165144694-run"
176+
}
201177
}
202178
}
203179
},

0 commit comments

Comments
 (0)