2017-01-19 41 views
1

我正在開發一個web應用程序,並觀察REST API標準。我正在尋找訂閱和付款的REST API最佳實踐。Laravel的REST API訂閱和交易(付款)端點

當新用戶訂閱「專業計劃」時,用戶應該爲計劃付錢,這是一筆交易。

當新用戶訂閱時,我應該設置POST:users/{id}/subscriptions[email protected]嗎?

由於訂閱是一個交易和兩個分開的請求(銀行之前/之後),所有的訂閱代碼應該在[email protected]

對於升級,取消或更新計劃,我應該設置PUT:users/{id}/subscriptions/{id}[email protected]或其他端點嗎?

+0

可能重複的[REST API - PUT vs PATCH與現實生活中的例子](http://stackoverflow.com/questions/28459418/rest-api-put-vs-patch-with-real-life-examples)。你的所有問題都在這個評論中得到了回答,並進行了全面的介請閱讀。 – Ohgodwhy

+0

@Ohgodwhy我讀了很多關於REST API的內容。我找不到我的答案。在這些答案中,對於我的問題還沒有確定的和最佳的實踐。如果你有答案,請回答。 – ivahidmontazer

+1

你是什麼意思,「因爲訂閱是一個交易和兩個分開的請求(銀行之前/之後)」。它不夠清楚。 – Gayan

回答

2

通常你不會在路由中傳遞用戶標識,除非在控制器中有某種​​認證。例如。管理員正在更新用戶。而是使用控制器中的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()。但我也得到路由中的用戶標識,並將其用於策略。我認爲它更友好! – ivahidmontazer

1

我想了解你所要求的,但對我來說這有點模糊,所以如果我得到了正確的結果,你試圖找出API端點命名的最佳實踐是什麼,它實際上取決於你的功能將提供以及如何公開文檔。

但是從我的觀點,我不明白了一個道理,以在網址鏈接的用戶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容易粗糙的主要計劃和訂閱。

主要作用: -

  1. 少編碼申購布倫特裏樹下拉式UI其reponsive計劃
  2. UI準備
  3. 輕鬆附加附加費
+0

不幸的是,我不使用braintree或條紋。 – ivahidmontazer