Skip to content

Commit 3829971

Browse files
committed
get resolved OpenAPI servers (#176)
1 parent 4521d6c commit 3829971

File tree

5 files changed

+141
-2
lines changed

5 files changed

+141
-2
lines changed

openapi-processor-core/src/main/kotlin/io/openapiprocessor/core/parser/openapi/v30/OpenApi.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,13 @@ open class OpenApi(
2525
private val log: Logger = LoggerFactory.getLogger(this.javaClass.name)
2626

2727
override fun getServers(): List<Server> {
28-
return listOf()
28+
val servers = mutableListOf<Server>()
29+
30+
api.servers.forEach { server ->
31+
servers.add(Server(server))
32+
}
33+
34+
return servers
2935
}
3036

3137
override fun getPaths(): Map<String, Path> {
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright 2024 https://github.com/openapi-processor/openapi-processor-core
3+
* PDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.openapiprocessor.core.parser.openapi.v30
7+
8+
import io.github.stduritemplate.StdUriTemplate
9+
import java.net.URI
10+
import io.openapiparser.model.v30.Server as Server30
11+
import io.openapiprocessor.core.parser.Server as ParserServer
12+
13+
class Server(private val server: Server30): ParserServer {
14+
15+
override fun getUri(): URI {
16+
val variables = mutableMapOf<String, Any>()
17+
18+
server.variables.forEach { variable ->
19+
variables[variable.key] = variable.value.default
20+
}
21+
22+
return URI.create(StdUriTemplate.expand(server.url, variables))
23+
}
24+
}

openapi-processor-core/src/main/kotlin/io/openapiprocessor/core/parser/openapi/v31/OpenApi.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,13 @@ class OpenApi(
2020
private val log: Logger = LoggerFactory.getLogger(this.javaClass.name)
2121

2222
override fun getServers(): List<Server> {
23-
return listOf()
23+
val servers = mutableListOf<Server>()
24+
25+
api.servers.forEach { server ->
26+
servers.add(Server(server))
27+
}
28+
29+
return servers
2430
}
2531

2632
override fun getPaths(): Map<String, ParserPath> {
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright 2024 https://github.com/openapi-processor/openapi-processor-core
3+
* PDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.openapiprocessor.core.parser.openapi.v31
7+
8+
import io.github.stduritemplate.StdUriTemplate
9+
import java.net.URI
10+
import io.openapiparser.model.v31.Server as Server31
11+
import io.openapiprocessor.core.parser.Server as ParserServer
12+
13+
class Server(private val server: Server31): ParserServer {
14+
15+
override fun getUri(): URI {
16+
val variables = mutableMapOf<String, Any>()
17+
18+
server.variables.forEach { variable ->
19+
variables[variable.key] = variable.value.default
20+
}
21+
22+
return URI.create(StdUriTemplate.expand(server.url, variables))
23+
}
24+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/*
2+
* Copyright 2024 https://github.com/openapi-processor/openapi-processor-core
3+
* PDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.openapiprocessor.core.parser.openapi
7+
8+
import io.kotest.core.spec.style.StringSpec
9+
import io.kotest.matchers.collections.shouldHaveSize
10+
import io.kotest.matchers.shouldBe
11+
import io.openapiprocessor.test.stream.Memory
12+
import java.net.URI
13+
14+
class ServerSpec: StringSpec({
15+
16+
"get server from openapi 3.0" {
17+
val parser = Parser()
18+
19+
Memory.add("openapi.yaml", """
20+
openapi: 3.0.5
21+
servers:
22+
- url: "{schema}://{host}:{port}/{path1}/{path2}/v{version}"
23+
variables:
24+
schema:
25+
default: https
26+
enum:
27+
- https
28+
- http
29+
host:
30+
default: openapiprocessor.io
31+
port:
32+
default: "443"
33+
path1:
34+
default: foo
35+
path2:
36+
default: bar
37+
version:
38+
default: "1"
39+
""".trimIndent())
40+
41+
val api = parser.parse("memory:openapi.yaml")
42+
43+
val servers = api.getServers()
44+
servers shouldHaveSize 1
45+
servers[0].getUri() shouldBe URI.create("https://openapiprocessor.io:443/foo/bar/v1")
46+
}
47+
48+
"get server from openapi 3.1" {
49+
val parser = Parser()
50+
51+
Memory.add("openapi.yaml", """
52+
openapi: 3.1.0
53+
servers:
54+
- url: "{schema}://{host}:{port}/{path1}/{path2}/v{version}"
55+
variables:
56+
schema:
57+
default: https
58+
enum:
59+
- https
60+
- http
61+
host:
62+
default: openapiprocessor.io
63+
port:
64+
default: "443"
65+
path1:
66+
default: foo
67+
path2:
68+
default: bar
69+
version:
70+
default: "1"
71+
""".trimIndent())
72+
73+
val api = parser.parse("memory:openapi.yaml")
74+
75+
val servers = api.getServers()
76+
servers shouldHaveSize 1
77+
servers[0].getUri() shouldBe URI.create("https://openapiprocessor.io:443/foo/bar/v1")
78+
}
79+
})

0 commit comments

Comments
 (0)