2017-01-19 11 views
1

私はWebアプリケーションを開発しており、REST API標準を守っています。定期購入と支払いのREST APIのベストプラクティスを探しています。REST API Laravelのサブスクリプションとトランザクション(支払い)エンドポイント

新しいユーザーが「プロ計画」を購読すると、ユーザーは計画のためにお金を払う必要があり、それはトランザクションです。

新しいユーザーが購読すると、POST:users/{id}/subscriptions[email protected]を設定する必要がありますか?

サブスクリプションはトランザクションと2つの分離されたリクエスト(前後のバンク)であるため、サブスクライブコードはすべて[email protected]である必要がありますか?

PUT:users/{id}/subscriptions/{id}[email protected]または他のエンドポイントを設定する必要がありますか、アップグレードをキャンセルまたは更新するには?

+0

を添付[REST API - PUTとPATCHの実際の例との複製](http://stackoverflow.com/questions/28459418/rest-api-put-vs-patch-with-real-life-examples)すべての質問はこのコメントで回答され、完全に網羅されています。読んでください。 – Ohgodwhy

+0

@Ohgodwhy REST APIに関する多くのコンテンツを読んでいます。私は私の答えを見つけることができませんでした。そして、これらの答えにも、私の質問についての確かなベストプラクティスはありません。答えがあれば答えてください。 – ivahidmontazer

+1

"サブスクリプションはトランザクションと2つの分離したリクエスト(前後のバンク)"なので、どういう意味ですか?それは十分明確ではない。 – Gayan

答えて

2

通常、コントローラに何らかの認証がない限り、ルートにはユーザIDを渡しません。例えば。管理者がユーザーを更新しています。代わりにコントローラのAuth::user()オブジェクトを使用してください。

あなたの質問に関して、多くのオプションがあり、それはあなた次第ですが、可能な方法はresource route\controllerです。

Route::resource('user/subscription', 'User\SubscriptionController');

そして、コントローラは次のようになります。

<?php 

namespace App\Http\Controllers\User; 

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Auth; 

class SubscriptionController extends Controller 
{ 

    public function index() 
    { 
     // get user 
     $user = Auth::user(); 

     // list all user subscriptions 
    } 

    public function store(Request $request) 
    { 

     // get user 
     $user = Auth::user(); 

     if(empty($user)) { 
      // create user 
     } 

     // create and process subscription for the user 
     // possibly using a plan id in the $request 
    } 

    public function show($id) 
    { 
     // get user 
     $user = Auth::user(); 

     // return user subscription details for $id 
    } 

    public function update(Request $request, $id) 
    { 
     // get user 
     $user = Auth::user(); 

     // update or change user subscription 
     // possibly using a plan id in the $request 

    } 


    public function destroy($id) 
    { 
     // get user 
     $user = Auth::user(); 

     // cancel user subscription with $id 
    } 
} 

をそして、あなたのルートは、次のようになります:

GETuser/subscriptionリストのすべてのユーザーサブスクリプションindex()

POSTuser/subscriptionユーザーを作成するサブスクリプションstore(Request $request)

GETuser/subscription/{subscription_id}は、ユーザのサブスクリプションshow($id)

PUT/PATCHuser/subscription/{subscription_id}更新ユーザーサブスクリプションupdate($id)

DELETEuser/subscription/{subscription_id}ブレインツリーやストライプのためのあなたの試みの両方のお支払い場合は、ユーザのサブスクリプションdestroy($id)

+0

私は自分のコントローラでauth() - > user()を使用します。しかし、私もルートのユーザーIDを取得し、私はポリシーのためにそれを使用します。私はそれがより親しみやすいと思う! – ivahidmontazer

1

私はあなたに求めていることを理解しようとしていますが、私にとってはちょっとぼやけています。そうすれば、APIエンドポイントのネーミングのベストプラクティスを理解しようとしています。提供し、ドキュメンテーションをどのように公開するのかを説明します。

しかし、私の視点から、私はURLでチェーンのユーザーIDと加入者IDに理由が表示されていないが、私はこのようなものをお勧めしますし、あなたが身体

$router->post('settings/user/plan', 'Settings\[email protected]'); 
$router->put('settings/user/plan', 'Settings\[email protected]'); 
$router->delete('settings/user/plan', 'Settings\[email protected]'); 
$router->post('settings/user/plan/resume', 'Settings\[email protected]'); 
$router->put('settings/user/card', 'Settings\[email protected]'); 
$router->put('settings/user/vat', 'Settings\[email protected]'); 
$router->get('settings/user/plan/invoice/{id}', 'Settings\[email protected]'); 

に必要なすべての情報を渡すことができますエンドポイントをどのように定義するかはあなた次第です

1

をキャンセル示し、ゲートウェイth簡単にメインタン計画とサブスクリプション。

メインBenifits: -

  1. サブスクリプションの少ないコーディングとブレインツリードロップUIで準備
  2. UIを計画
  3. そのreponsiveが簡単にアドオン料金 可能
+0

残念ながら、私はbraintreeまたはstripeを使用しません。 – ivahidmontazer

関連する問題