2017-08-10 12 views
1

Authorize.NETはvery thorough SDK.を提供しています。既存のAPIの周りにWeb APIラッパーを作成する

あなたは、単にあなたのソリューションでそれをインストールすることができます。

Install-Package AuthorizeNet 

我々はAuthorizeNetのAPIのすべての機能をラップするサービス(複数可)が必要です。

簡単にするために、のは、APIは、次のメソッドを公開するとしましょう:

public bool Pay(TransactionModel trans); 
public bool Decline(Guid id); 
public bool Refund(Guid id); 

我々は独自のソリューションコントローラのメソッドからこれらのメソッドに簡単にアクセスできます。たとえば、次のように独自のmicroserviceにそれぞれ(たいと思い、私たちはこれらのコントローラをラップしたいと仮定すると、

enter image description here

を:

[HttpPost] 
public bool PayAuthNet([FromBody] AuthnetTransModel model) 
{ 
    TransactionModel localTransModel = CreateLocalAuthModel(model); 
    var authNet = new AuthorizeNet(); 
    return authNet.Pay(localTransModel); 
} 

しかし、APIライブラリはAuthorize.NETが公開ことはかなり広大ですこのアプローチのフィードバック)これらのAPIのすべてをラップする簡単な方法はありますか?クライアントがAuthorize.NETに直接アクセスするのではなく、ラッパーサービスを経由するように強制しますか?

+2

ISNがマッピングし、実行するために必要な情報を抽出するために、式ツリーを検査します魔法の文字列

public class BillingConroller : ApiController { [HttpPost] public bool PayAuthNet([FromBody] AuthnetTransModel model) { return authorizeNetWrapper.Execute<BillingConroller>(c => c.PayAuthNet(model)); } } 

から逃げるために式ツリーを使用することができますそのAPIはすでにラッパーですか?なぜそれの上に追加のレイヤーが必要なのでしょうか?私の上司は私たちが言ったので – niksofteng

+0

。私たちはクライアントがauthorizenetを使用できるようにしたいが、非常に "制御された"メカニズムで各クライアントがアクセスできるものを制御したい、という理由でラッパーが必要なのです –

+0

Wowはかなり広いです。私の頭の上から離れて、公開されたAPIに基づいたコンベンションや、1つのポイントを通るルート/ファンネルコマンドを作成しようとすることもできます。しかし、私は多くの仕事がIMOの努力に値するものではないと思います。 – Nkosi

答えて

1

これは、コメントには長すぎるため、これは簡単な説明です。

はOP

[HttpPost] 
public bool PayAuthNet([FromBody] AuthnetTransModel model) 
{ 
    TransactionModel localTransModel = CreateLocalAuthModel(model); 
    var authNet = new AuthorizeNet(); 
    return authNet.Pay(localTransModel); 
} 

まず命名規則で提供されている例を使用してAuthorizeNet

を包む説明するための擬似コードを使用することになります。提供されるモデルを変換しますMVCは、反射メソッドの引数の型が決定することができ、AutoMapperがどのように機能するかに似たマッピング機能を使用して、その後どのようにName/ActionマップへNameController.Action

PayAuthNet  --> AuthorizeNet.Pay 
DeclineAuthNet --> AuthorizeNet.Decline 
RefundAuthNet --> AuthorizeNet.Refund 

などの命名規則に基づいてコントローラを見つける方法と同様にAuthnetTransModel関数の予想されるTransactionModel引数に置き換えます。

仮にあなたが内部でマッチング包まれたAPIに

From expression tree: 
    Method being invoked: PayAuthNet 
    Argument provider:  AuthnetTransModel 
After applying convention: 
    Found matching method: AuthorizeNet.Pay 
    Expected arguement: TransactionModel 
Construct command 
    Create instance of TransactionModel and copy properties from provided model 
    Invoke => authNet.Pay(localTransModel) 
関連する問題