mirror of
https://github.com/metosin/reitit.git
synced 2025-12-16 16:01:11 +00:00
doc: improve route_syntax.md
- don't use no-data no-child routes as examples, they confuse newbies - spell out what route data can be - link to other docs
This commit is contained in:
parent
02d4f797ca
commit
494aa29cdb
1 changed files with 30 additions and 32 deletions
|
|
@ -1,6 +1,9 @@
|
|||
# Route Syntax
|
||||
|
||||
Routes are defined as vectors of String path and optional (non-sequential) route argument child routes.
|
||||
Routes are defined as vectors of:
|
||||
- path (a string)
|
||||
- optional route data: usually a map, but see [Route Data](./route_data.md)
|
||||
- any number of child routes
|
||||
|
||||
Routes can be wrapped in vectors and lists and `nil` routes are ignored.
|
||||
|
||||
|
|
@ -11,43 +14,38 @@ Paths can have path-parameters (`:id`) or catch-all-parameters (`*path`). Parame
|
|||
Simple route:
|
||||
|
||||
```clj
|
||||
["/ping"]
|
||||
["/ping" {:handler ping}]
|
||||
```
|
||||
|
||||
Two routes:
|
||||
Two routes with more data:
|
||||
|
||||
```clj
|
||||
[["/ping"]
|
||||
["/pong"]]
|
||||
[["/ping" {:handler ping
|
||||
:cost 300}]
|
||||
["/pong" {:handler pong
|
||||
:tags #{:game}}]]
|
||||
```
|
||||
|
||||
Routes with route arguments:
|
||||
Routes with path parameters (see also [Coercion](../coercion/coercion.md) and [Ring Coercion](../ring/coercion.md)):
|
||||
|
||||
```clj
|
||||
[["/ping" ::ping]
|
||||
["/pong" {:name ::pong}]]
|
||||
```
|
||||
|
||||
Routes with path parameters:
|
||||
|
||||
```clj
|
||||
[["/users/:user-id"]
|
||||
["/api/:version/ping"]]
|
||||
[["/users/:user-id" {:handler get-user}]
|
||||
["/api/:version/ping" {:handler ping-version}]]
|
||||
```
|
||||
|
||||
```clj
|
||||
[["/users/{user-id}"]
|
||||
["/files/file-{number}.pdf"]]
|
||||
[["/users/{user-id}" {:handler get-user}]
|
||||
["/files/file-{number}.pdf" {:handler get-pdf}]]
|
||||
```
|
||||
|
||||
Route with catch-all parameter:
|
||||
|
||||
```clj
|
||||
["/public/*path"]
|
||||
["/public/*path" {:handler get-file}]
|
||||
```
|
||||
|
||||
```clj
|
||||
["/public/{*path}"]
|
||||
["/public/{*path}" {:handler get-file}]
|
||||
```
|
||||
|
||||
Nested routes:
|
||||
|
|
@ -55,9 +53,9 @@ Nested routes:
|
|||
```clj
|
||||
["/api"
|
||||
["/admin" {:middleware [::admin]}
|
||||
["" ::admin]
|
||||
["/db" ::db]]
|
||||
["/ping" ::ping]]
|
||||
["" {:name ::admin}]
|
||||
["/db" {:name ::db}]]
|
||||
["/ping" {:name ::ping}]]
|
||||
```
|
||||
|
||||
Same routes flattened:
|
||||
|
|
@ -77,31 +75,31 @@ Reitit does not apply any encoding to your paths. If you need that, you must enc
|
|||
Normal path-parameters (`:id`) can start anywhere in the path string, but have to end either to slash `/` (currently hardcoded) or to an end of path string:
|
||||
|
||||
```clj
|
||||
[["/api/:version"]
|
||||
["/files/file-:number"]
|
||||
["/user/:user-id/orders"]]
|
||||
[["/api/:version" {...}]
|
||||
["/files/file-:number" {...}]
|
||||
["/user/:user-id/orders" {...}]]
|
||||
```
|
||||
|
||||
Bracket path-parameters can start and stop anywhere in the path-string, the following character is used as a terminator.
|
||||
|
||||
```clj
|
||||
[["/api/{version}"]
|
||||
["/files/{name}.{extension}"]
|
||||
["/user/{user-id}/orders"]]
|
||||
[["/api/{version}" {...}]
|
||||
["/files/{name}.{extension}" {...}]
|
||||
["/user/{user-id}/orders" {...}]]
|
||||
```
|
||||
|
||||
Having multiple terminators after a bracket path-path parameter with identical path prefix will cause a compile-time error at router creation:
|
||||
|
||||
```clj
|
||||
[["/files/file-{name}.pdf"] ;; terminator \.
|
||||
["/files/file-{name}-{version}.pdf"]] ;; terminator \-
|
||||
[["/files/file-{name}.pdf" {...}] ;; terminator \.
|
||||
["/files/file-{name}-{version}.pdf" {...}]] ;; terminator \-
|
||||
```
|
||||
|
||||
### Slash Free Routing
|
||||
|
||||
```clj
|
||||
[["broker.{customer}.{device}.{*data}"]
|
||||
["events.{target}.{type}"]]
|
||||
[["broker.{customer}.{device}.{*data}" {...}]
|
||||
["events.{target}.{type}" {...}]]
|
||||
```
|
||||
|
||||
### Generating routes
|
||||
|
|
|
|||
Loading…
Reference in a new issue