2017-01-19 111 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