All Projects → RustedBones → akka-http-scalapb

RustedBones / akka-http-scalapb

Licence: Apache-2.0 License
akka-http protobuf binary and json marshalling/unmarshalling for ScalaPB messages

Programming Languages

scala
5932 projects

Projects that are alternatives of or similar to akka-http-scalapb

scalapb-circe
Json/Protobuf convertors for ScalaPB use circe
Stars: ✭ 38 (+153.33%)
Mutual labels:  protobuf, scalapb
scalapb-playjson
Json/Protobuf convertors for ScalaPB use play-json
Stars: ✭ 15 (+0%)
Mutual labels:  protobuf, scalapb
gosproto
基于云风的sproto二进制标准上的描述文件及代码生成工具
Stars: ✭ 52 (+246.67%)
Mutual labels:  protobuf
kafka-streams-query
Library offering http based query on top of Kafka Streams Interactive Queries
Stars: ✭ 70 (+366.67%)
Mutual labels:  akka-http
gosmparse
Processing OpenStreetMap PBF files at speed with Go
Stars: ✭ 55 (+266.67%)
Mutual labels:  protobuf
protostuff-example
Experimenting protostuff
Stars: ✭ 13 (-13.33%)
Mutual labels:  protobuf
pbkit
protobuf toolkit for typescript and others
Stars: ✭ 173 (+1053.33%)
Mutual labels:  protobuf
bloomrpc-mock
Toolset library for working with GRPC mocks
Stars: ✭ 25 (+66.67%)
Mutual labels:  protobuf
protocell
Conjures up convenient OCaml types and serialization functions based on protobuf definition files
Stars: ✭ 18 (+20%)
Mutual labels:  protobuf
agentgo
Hi! Agentgo is a tool for making remote command executions from server to client with golang, protocol buffers (protobuf) and grpc.
Stars: ✭ 15 (+0%)
Mutual labels:  protobuf
ocaml-grpc-envoy
Using OCaml + gRPC via Envoy
Stars: ✭ 41 (+173.33%)
Mutual labels:  protobuf
minipb
Mini Protobuf {,de}serializer
Stars: ✭ 34 (+126.67%)
Mutual labels:  protobuf
protocol
The schemas for the Harmony protocol
Stars: ✭ 16 (+6.67%)
Mutual labels:  protobuf
graphql-binary
GraphQL binary protocol for smaller network traffic and parsing performance
Stars: ✭ 41 (+173.33%)
Mutual labels:  protobuf
deprecated-pokemongo-game-master
⚠️ DEPRECATED - LOOK README ⚠️ This repository is collection of the decoded GAME_MASTER-protobuf files
Stars: ✭ 38 (+153.33%)
Mutual labels:  protobuf
javascript-serialization-benchmark
Comparison and benchmark of JavaScript serialization libraries (Protocol Buffer, Avro, BSON, etc.)
Stars: ✭ 54 (+260%)
Mutual labels:  protobuf
akka-http-router
A simple library for route definition of akka-http.
Stars: ✭ 20 (+33.33%)
Mutual labels:  akka-http
graphql-gateway
SDL-based GraphQL gateway for REST and GraphQL-based micro-services
Stars: ✭ 55 (+266.67%)
Mutual labels:  akka-http
grpc-chat
Simple Chat Server/Client implemented with gRPC
Stars: ✭ 107 (+613.33%)
Mutual labels:  protobuf
liftbridge-api
Protobuf definitions for the Liftbridge gRPC API. https://github.com/liftbridge-io/liftbridge
Stars: ✭ 15 (+0%)
Mutual labels:  protobuf

akka-http-scalapb

Continuous Integration Maven Central Software License Scala Steward badge

akka-http protobuf and json marshalling/unmarshalling for ScalaPB messages

Versions

Version Release date Akka Http version ScalaPB version Scala versions
0.2.5 2022-02-06 10.2.7 0.11.5 (0.12.0 json4s) 2.13.8, 2.12.15
0.2.4 2021-03-24 10.2.4 0.11.0 (0.11.0 json4s) 2.13.5, 2.12.13
0.2.3 2020-09-18 10.2.0 0.10.8 (0.10.1 json4s) 2.13.3, 2.12.12
0.2.2 2020-05-10 10.1.11 0.10.3 (0.10.1 json4s) 2.13.2, 2.12.11
0.2.1 2019-07-13 10.1.8 0.9.0 (0.9.2 json4s) 2.13.0, 2.12.8, 2.11.12
0.2.0 2019-06-22 10.1.8 0.9.0 (0.9.2 json4s) 2.13.0, 2.12.8, 2.11.12
0.1.0 2019-01-27 10.1.7 0.8.4 (0.7.2 json4s) 2.12.8, 2.11.12

The complete list can be found in the CHANGELOG file.

Getting akka-http-scalapb

Libraries are published to Maven Central. Add to your build.sbt:

libraryDependencies += "fr.davit" %% "akka-http-scalapb" % <version> // binary & json support

Quick start

For the examples, we are using the following proto domain model

message Item {
  string name = 1;
  int64 id    = 2;
}

message Order {
  reapeated Item items = 1;
}

The implicit marshallers and unmarshallers for your generated proto classes are defined in ScalaPBSupport. You simply need to have them in scope.

import akka.http.scaladsl.server.Directives._
import fr.davit.akka.http.scaladsl.marshallers.scalapb.ScalaPBSupport._

object MyProtoService {

  val route =
    get {
      pathSingleSlash {
        complete(Item("thing", 42))
      }
    } ~ post {
      entity(as[Order]) { order =>
        val itemsCount = order.items.size
        val itemNames = order.items.map(_.name).mkString(", ")
        complete(s"Ordered $itemsCount items: $itemNames")
      }
    }
}

Marshalling/Unmarshalling of the generated classes depends on the Accept/Content-Type header sent by the client:

  • Content-Type: application/json: json
  • Content-Type: application/x-protobuf: binary
  • Content-Type: application/x-protobuffer: binary
  • Content-Type: application/protobuf: binary
  • Content-Type: application/vnd.google.protobuf: binary

No Accept header or matching several (eg Accept: application/*) will take the 1st matching type from the above list.

Json only

If you are using scalaPB for json (un)marshalling only, you can use ScalaPBJsonSupport from the sub module

libraryDependencies += "fr.davit" %% "akka-http-scalapb-json4s" % <version> // json support only

Binary only

If you are using scalaPB for binary (un)marshalling only, you can use ScalaPBBinarySupport form the sub module

libraryDependencies += "fr.davit" %% "akka-http-scalapb-binary" % <version> // binary support only

Limitation

Only json (un)marshallers are able to support collections of proto messages as root object.

Entity streaming (http chunked transfer) is at the moment not supported by the library.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].