2016-07-27 8 views
0

他のインターフェイスやマイクロサービスによってトリガされるすべての通知(電子メール、SMSなど)の実行を担当するマイクロサービスを作成しています。これは、すべての通知ロジックと処理を集中化するためです。通知アクションは、残りのWebサービスURLを呼び出すことによってトリガーされます。RESTを使用した通知のジレンマデザイン

これが私のジレンマです。リクエストの種類ごとに1つのURLを作成するのか、すべてのURLを1つ作成するのですか?

OPTION1

@Path("{sourceId}/registationEmail") 
@Path("{sourceId}/forgotPasswordEmail") 
@Path("{sourceId}/productionTicketEmail") 
@Path("{sourceId}/registationSms") 
@Path("{sourceId}/forgotPasswordSms") 
@Path("{sourceId}/productionTicketSms") 

または

OPTION 2

@Path("{sourceId}/email") 
@Path("{sourceId}/sms") 

は、ここでの問題は、その通知のすべてのタイプがの異なるセットを持っているだろう、我々は、入力として@BeanParamを使用しているあります入力値。それがオプション2に向けて決定する主な問題ですか、それともREST構成で回避する方法がありますか?

答えて

0

Richardson Maturity Model level 1を見ると、実際には2つのリソース(別名オプション2)があり、どちらもタイププロパティを持つことができます。もちろん、彼らは入力値の異なるセットを持つつもりですが、それらのすべての電子メールタイプは、正しい(From、To、Subject、Bodyなど)、同じプロパティを持つ必要がありますか?それが2つの他のものと同じように見え、動作するならば、別個のエンドポイントを有することには意味がない。

+0

問題は、電子メールコンテンツを構築する処理ロジックがこのNotifications Webサービスによって行われるため、構築されたメッセージ本文を入力としてこのサービスに送信することができず、メッセージ本体を構築するために必要なパラメータのみを返します。 –

+0

だから何が問題なの?ボディプロパティを持つ代わりに、いくつかの小さな(?)は、それぞれの電子メール/ SMSの種類ごとに異なる値を持つ異なるものです。すべての電子メールが類似のパラメータ(実際の値ではなくタイプ/名前)を必要とする限り、汎用モデル –

+0

を持つ単一のエンドポイントを介して配信される可能性があります。したがって、同じBeanParam入力を再利用することができます。 –

0

私はオプション2のために行くだろう:それは他の選択肢よりもはるかに良く見える

@Path("{sourceId}/email") 
@Path("{sourceId}/sms") 


私はあなたの完全なURIがどのようなものかわからないが、私は/sources/{sourceId}/email/sources/{sourceId}/notification/emailのようなものを持っているでしょう。

そして、あなたの要求は次のように次のようになります。あなたはあなたの入力がどのように見えるかについての詳細を提供していない

POST /sources/{sourceId}/email HTTP/1.1 
Host: example.com 
Content-Type: application/json 

{ 
    "to": "[email protected]", 
    "subject": "Question 38602123", 
    "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit." 
} 

。使用している依存関係についての詳細はありません。したがって、推測して決定的な答えをあなたに提供するのは難しいです。

あなたは@BeanParamと言っていますので、JAX-RSとJerseyなどの実装の1つを使用しているとします。リソースを表すためにJSONやXMLを使用している場合は、Jacksonを使用している可能性が非常に高いです。

したがって、さまざまな入力を処理するために、継承とジャクソンのポリモーフィックなデシリアライズを使用できます。トリックを行う@JsonTypeInfo@JsonSubTypesのようないくつかの注釈があります。

+0

すべての電子メールテンプレートは通知Webサービスによって管理されるため、フォーマットされたメッセージをサービスに送信することはできません。各電子メールタイプにも異なる入力セットがあるので、単一の@BeanParamクラスを使用すると、通知のたびに必要なすべてのデータ入力を処理する多くの属性が得られます。 –

+0

@DavoinShowerhandlesあなたの質問? –

関連する問題