2016-12-20 12 views
0

RPCに参加する方法があるかどうかを知りたいのですが、共有コードベースなしで他のクライアントが呼び出すことができます)。RPCがクライアント/サーバー間で共有されていてもRESTメソッドで共有されています

スカラー用の多くのhttpライブラリ(akka-httphttp4sなど)があり、RPCライブラリはautowireです。しかし、私はそれらを接続する方法はありません。私はautowireがプロトコルにとらわれないことを知っていますが、これは欠点です.RPC(autowire)ではなく、http層で起こったルーティング(例:akka-http)にしたいからです。

私はそれが可能かどうかを知りたいです。そうであれば、継続中の実装はありますか?

+0

はTW得たように見えます何かが進行中ですhttps://github.com/ThoughtWorksInc/akka-http-rpc/blob/master/src/main/scala/com/thoughtworks/akka/http/RpcSupport.scala –

答えて

1

endpointsはこの方向で進行中の作業です(注:私はこのライブラリの著者です)。 HTTPエンドポイント(使用する動詞、URLなど)からなるAPIを定義する手段を提供し、クライアントやサーバーとしてAPIを使用する実装を提供します。これはScala.jsと互換性があるため、アプリケーションのクライアント側とサーバー側でAPI定義を共有し、静的にチェックされたリモート呼び出しを行うことで利益を得ます。

HTTP機能(キャッシュ、ヘッダー、認証など)の使用を完全に制御できるように設計されています。ここで

は、2つのエンドポイントでの基本的なAPIの定義で次のようにあなたは、実際の呼び出しを実行するために、クライアント側からそれを使用することができます

// POST /my-resources 
val create: Endpoint[CreateMyResource, MyResource] = 
    endpoint(post(path/"my-resources", jsonRequest[CreateMyResource]), jsonResponse[MyResource]) 

// GET /my-resources/:id 
val read: Endpoint[String, Option[MyResource]] = 
    endpoint(get(path/"my-resources"/segment[String]), option(jsonResponse[MyResource])) 

val eventuallyResource: Future[MyResource] = 
    create(CreateMyResource("foo", 42)) 

val eventuallyResource2: Future[Option[MyResource]] = 
    read("abc123") 
関連する問題