98 lines
2.6 KiB
Swift
98 lines
2.6 KiB
Swift
|
|
import Foundation
|
|
import SwiftUI
|
|
import Combine
|
|
|
|
|
|
struct SwaggerAPI: Codable {
|
|
let swagger: String
|
|
let info: Info
|
|
let paths: [String: PathItem]
|
|
|
|
struct Info: Codable {
|
|
let title: String
|
|
let version: String
|
|
}
|
|
|
|
struct PathItem: Codable {
|
|
let summary: String?
|
|
let description: String?
|
|
let parameters: [Parameter]?
|
|
let responses: [String: Response]
|
|
|
|
struct Parameter: Codable {
|
|
let name: String
|
|
let info: String
|
|
let required: Bool
|
|
let type: String
|
|
}
|
|
|
|
struct Response: Codable {
|
|
let description: String
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
class SwaggerAPIService: ObservableObject {
|
|
@Published var apiData: SwaggerAPI?
|
|
|
|
func fetchAPI() {
|
|
guard let url = URL(string: "https://git.irohlf.de/swagger/api" ) else { return }
|
|
URLSession.shared.dataTask(with: url) { data, response, error in
|
|
guard let data = data, error == nil else { return }
|
|
DispatchQueue.main.async {
|
|
do {
|
|
let decodedData = try JSONDecoder().decode(SwaggerAPI.self, from: data)
|
|
self.apiData = decodedData
|
|
} catch {
|
|
print("Error decoding data: \(error)")
|
|
}
|
|
}
|
|
}.resume()
|
|
}
|
|
}
|
|
|
|
struct SwaggerContentView: View {
|
|
@StateObject private var apiService = SwaggerAPIService()
|
|
|
|
var body: some View {
|
|
NavigationView {
|
|
List {
|
|
if let api = apiService.apiData {
|
|
Section(header: Text("API Info")) {
|
|
Text("Title: \(api.info.title)")
|
|
Text("Version: \(api.info.version)")
|
|
}
|
|
|
|
Section(header: Text("Paths")) {
|
|
ForEach(api.paths.keys.sorted(), id: \.self) { path in
|
|
if let pathItem = api.paths[path] {
|
|
VStack(alignment: .leading) {
|
|
Text(path)
|
|
.font(.headline)
|
|
Text(pathItem.summary ?? "No summary available")
|
|
.font(.subheadline)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
Text("Loading...")
|
|
.onAppear {
|
|
apiService.fetchAPI()
|
|
}
|
|
}
|
|
}
|
|
.navigationTitle("Swagger API")
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#Preview {
|
|
SwaggerContentView()
|
|
|
|
}
|