joinhandshake/querl
Querl is a minimal GraphQL client library. It aims to be agnostic as to the architecture and technology choices of your app. It can be used with any networking stack, and makes no assumptions about how your models are defined. In addition, it is as Swift-y as possible: protocol-o
Features
Querl supports the following GraphQL features:
- Single-model queries
- Mutations
- Paginated queries
- Variables
- Fragments
- Type conditions
- Directives
- Aliasing
It supports those GraphQL features with these Swift language features:
- Composable, extensible query protocols
- Strongly-typed arguments and responses
- Bring your own model types
Querl does not (yet) support the following GraphQL features:
- Queries returning multiple top-level models
- Subscriptions
Example
To run the example project, clone the repo, and run pod install from the Example directory first.
The code can be as simple as this:
CountryForCode.graphql
query($code: ID!) {
country(code: $code) {
name
}
}main.swift
import Querl
struct CountryForCode: Query, HasArguments {
struct Response: Decodable {
let country: Country?
}
let code: String
}
let query = CountryForCode(code: "US")
let request = URLRequest(url: graphQLEndpoint)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try JSONSerialization.data(withJSONObject: query.body)
let (data, _) = try await URLSession.shared.data(for: request)
let country = try CountryForCode.decodeResponse(data).country // "United States of America"This pattern can be easily adapted to Alamofire, or any other networking library that performs POST requests.
Requirements
Querl requires iOS 11.0 or higher.
Installation
CocoaPods
Querl is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'Querl'Swift Package Manager
Declare Querl as a package dependency.
.package(
name: "Querl",
url: "https://github.com/joinhandshake/Querl",
.upToNextMinor(from: "0.1.0")),Use Querl in target dependencies
.product(name: "Querl", package: "Querl")
```Contributing
See CONTRIBUTING.md for more information. Contributions are welcome!
Code of Conduct
See CODE_OF_CONDUCT.md for more information.
License
Querl is available under the Apache 2.0 license. See the LICENSE file for more info.
Package Metadata
Repository: joinhandshake/querl
Default branch: main
README: README.md