mirror of https://github.com/vapor/docs.git
55 lines
1.3 KiB
Markdown
55 lines
1.3 KiB
Markdown
---
|
|
currentMenu: guide-json
|
|
---
|
|
|
|
# JSON
|
|
|
|
JSON is an integral part of Vapor. It powers Vapor's [Config](config.md) and is incredibly easy to use in both requests and responses.
|
|
|
|
## Request
|
|
|
|
JSON is automatically available in `request.data` alongside form-urlencoded data and query data. This allows you to focus on making a great API, not worrying about what content types data will be sent in.
|
|
|
|
```swift
|
|
drop.any("hello") { request in
|
|
guard let name = request.data["name"].string else {
|
|
throw Abort.badRequest
|
|
}
|
|
|
|
return "Hello, \(name)!"
|
|
}
|
|
```
|
|
|
|
This will return a greeting for any HTTP method or content type that the `name` is sent as, including JSON.
|
|
|
|
### JSON Only
|
|
|
|
To specifically target JSON, use the `request.json` property.
|
|
|
|
```swift
|
|
drop.post("json") { request in
|
|
guard let name = request.json["name"].string else {
|
|
throw Abort.badRequest
|
|
}
|
|
|
|
return "Hello, \(name)!"
|
|
}
|
|
```
|
|
The above snippet will only work if the request is sent with JSON data.
|
|
|
|
## Response
|
|
|
|
To respond with JSON, simply wrap your data structure with `JSON(node: )`
|
|
|
|
```swift
|
|
drop.get("version") { request in
|
|
return try JSON(node: [
|
|
"version": "1.0"
|
|
])
|
|
}
|
|
```
|
|
|
|
## Middleware
|
|
|
|
The `JSONMiddleware` is included in the `Droplet`'s middleware by default. You can remove it if you don't want JSON to be parsed.
|