Client#
The client provided by HTTP is used to make outgoing requests to remote servers. Let’s look at a simple outgoing request.
QuickStart#
Let’s jump right in to make a simple HTTP Request. Here’s a basic GET request using your Vapor Droplet.
let query = "..."
let res = try drop.client.get("https://api.spotify.com/v1/search?type=artist&q=\(query)")
print(res)
Clean Up#
The url above can be a little tricky to read, so let’s use the query parameter to clean it up a little bit:
let res = try drop.client.get("https://api.spotify.com/v1/search", query: [
"type": "artist",
"q": query
])
Continued#
In addition to GET requests, Vapor’s client provides support for most common HTTP functions. GET, POST, PUT, PATCH, DELETE
Headers#
You can also add additional headers to the request.
try drop.client.get("http://some-endpoint/json", headers: [
"API-Key": "vapor123"
])
Custom Request#
You can ask the client to respond to any Request that you create.
This is useful if you need to add JSON or FormURLEncoded data to the request.
let req = Request(method: .post, uri: "http://some-endpoint")
req.formURLEncoded = Node(node: [
"email": "mymail@vapor.codes"
])
try drop.client.respond(to: req)
Re-usable Connection#
Up to this point, we’ve been using drop.client which is a ClientFactory. This creates a new client and TCP connection for each request.
For more better performance, you can create an re-use a single client.
let pokemonClient = try drop.client.makeClient(
scheme: "http",
host: "pokeapi.co",
securityLayer: .none
)
for i in 0...1 {
let response = try pokemonClient.get("/api/v2/pokemon/", query: [
"limit": 20,
"offset": i
])
print("response: \(response)")
}
Note
Clients created using .makeClient can not connect to a different server after initialization. (Proxy servers are an exception)
Proxy#
The drop.client can be configured to use a proxy by default.
Config/client.json
{
"proxy": {
"hostname": "google.com",
"port": 80,
"securityLayer": "none"
}
}
For the above example, all requests sent to drop.client.get(...) would be proxied through google.com.