https://github.com/rustedbones/akka-http-avro
akka-http avro marshalling/unmarshalling for generated java avro specific records
https://github.com/rustedbones/akka-http-avro
akka-http avro http json scala
Last synced: 3 months ago
JSON representation
akka-http avro marshalling/unmarshalling for generated java avro specific records
- Host: GitHub
- URL: https://github.com/rustedbones/akka-http-avro
- Owner: RustedBones
- License: apache-2.0
- Archived: true
- Created: 2020-02-28T17:59:32.000Z (about 6 years ago)
- Default Branch: main
- Last Pushed: 2023-11-02T15:38:29.000Z (over 2 years ago)
- Last Synced: 2023-11-02T16:58:25.287Z (over 2 years ago)
- Topics: akka-http, avro, http, json, scala
- Language: Scala
- Homepage:
- Size: 76.2 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 21
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# akka-http-avro
[](https://github.com/RustedBones/akka-http-avro/actions/workflows/ci.yml)
[](https://maven-badges.herokuapp.com/maven-central/fr.davit/akka-http-avro_2.13)
[](LICENSE)
[](https://scala-steward.org)
akka-http avro marshalling/unmarshalling for generated java avro specific records
After the akka [licencing change](https://www.lightbend.com/blog/why-we-are-changing-the-license-for-akka),
no further development is expected on `akka-http-avro`.
If you're migrating to pekko-http, see [pekko-http-avro](https://github.com/RustedBones/pekko-http-avro).
## Versions
| Version | Release date | Akka Http version | Avro version | Scala versions |
|---------|--------------|-------------------|--------------|--------------------------------|
| `0.1.3` | 2022-04-24 | `10.2.9` | `1.11.0` | `2.13.8`, `2.12.15` |
| `0.1.2` | 2020-09-18 | `10.2.0` | `1.10.0` | `2.13.3`, `2.12.12` |
| `0.1.1` | 2020-07-03 | `10.1.12` | `1.10.0` | `2.13.3`, `2.12.11`, `2.11.12` |
| `0.1.0` | 2020-03-01 | `10.1.11` | `1.9.2` | `2.13.1`, `2.12.10`, `2.11.12` |
The complete list can be found in the [CHANGELOG](CHANGELOG.md) file.
## Getting akka-http-avro
Libraries are published to Maven Central. Add to your `build.sbt`:
```scala
libraryDependencies += "fr.davit" %% "akka-http-avro" %
```
## Quick start
For the examples, we are using the following avro domain model
```json
{
"namespace": "com.example",
"type": "record",
"name": "Item",
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "id",
"type": "long"
}
]
}
```
and
```json
{
"namespace": "com.example",
"type": "record",
"name": "Order",
"fields": [
{
"name": "items",
"type": {
"type" : "array",
"items": "com.example.Item"
}
}
]
}
```
Marshalling/Unmarshalling of the generated classes depends on the `Accept`/`Content-Type` header sent by the client:
- `Content-Type: application/json`: json
- `Content-Type: avro/binary`: binary
-No `Accept` header or matching several (eg `Accept: application/*`) will take the 1st matching type from the above list.
### Avro
The implicit marshallers and unmarshallers for your generated avro classes are defined in
`AvroSupport`. Specific (un)marshallers can be imported from `AvroBinarySupport`, `AvroJsonSupport`.
You simply need to have them in scope.
```scala
import akka.http.scaladsl.server.Directives._
import fr.davit.akka.http.scaladsl.marshallers.avro.AvroSupport._
object MyAvroService {
val route =
get {
pathSingleSlash {
complete(Item.newBuilder().setName("thing").setId(42).build())
}
} ~ post {
entity(as[Order]) { order =>
val itemsCount = order.getItems.size
val itemNames = order.getItems.asScala.map(_.getName).mkString(", ")
complete(s"Ordered $itemsCount items: $itemNames")
}
}
}
```
## Limitation
Entity streaming (http chunked transfer) is at the moment not supported by the library.