REST API Laravel 中的订阅和交易(支付)端点
REST API Subscriptions and transactions(payments) endpoints in Laravel
我正在开发一个网络应用程序并且我遵守 REST API 标准。我正在搜索订阅和付款的 REST API 最佳实践。
当新用户订阅"pro plan"时,用户应该为计划付费,这是一笔交易。
新用户订阅时是否需要设置POST:users/{id}/subscriptions
和SubscriptionsController@store
?
并且因为订阅是一个交易和 2 个单独的请求(before/after 银行),所以所有的订阅代码都应该在 SubscriptionController@store
?
对于升级、取消或更新计划,我应该设置 PUT:users/{id}/subscriptions/{id}
和 SubscriptionController@update
还是其他端点?
我正在尝试了解您的要求,但对我来说有点模糊,所以如果我没看错,您正在尝试弄清楚 API 端点命名的最佳做法是什么,这真的取决于您将提供的功能以及您将如何公开文档。
但从我的角度来看,我没有看到在 URL 中链接用户 ID 和订户 ID 的理由,我推荐这样的东西,你可以在正文中传递你想要的所有信息
$router->post('settings/user/plan', 'Settings\SubscriptionController@subscribe');
$router->put('settings/user/plan', 'Settings\SubscriptionController@changeSubscriptionPlan');
$router->delete('settings/user/plan', 'Settings\SubscriptionController@cancelSubscription');
$router->post('settings/user/plan/resume', 'Settings\SubscriptionController@resumeSubscription');
$router->put('settings/user/card', 'Settings\SubscriptionController@updateCard');
$router->put('settings/user/vat', 'Settings\SubscriptionController@updateExtraBillingInfo');
$router->get('settings/user/plan/invoice/{id}', 'Settings\SubscriptionController@downloadInvoice');
如何定义端点完全取决于您
通常您不会在路由中传递用户 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
}
}
你的路线是这样的:
GET
user/subscription
列出所有用户订阅 index()
POST
user/subscription
创建用户订阅 store(Request $request)
GET
user/subscription/{subscription_id}
显示用户订阅 show($id)
PUT/PATCH
user/subscription/{subscription_id}
更新用户订阅 update($id)
DELETE
user/subscription/{subscription_id}
取消用户订阅 destroy($id)
如果您尝试 Braintree 或 Stripe 这两个支付网关可以轻松维护计划和订阅。
主要优点:-
- 更少的订阅和计划编码
- UI 已在 Braintree 树中准备就绪 drop-ui 其响应[=22=]
- 轻松附加 add-ons 费用
我正在开发一个网络应用程序并且我遵守 REST API 标准。我正在搜索订阅和付款的 REST API 最佳实践。
当新用户订阅"pro plan"时,用户应该为计划付费,这是一笔交易。
新用户订阅时是否需要设置POST:users/{id}/subscriptions
和SubscriptionsController@store
?
并且因为订阅是一个交易和 2 个单独的请求(before/after 银行),所以所有的订阅代码都应该在 SubscriptionController@store
?
对于升级、取消或更新计划,我应该设置 PUT:users/{id}/subscriptions/{id}
和 SubscriptionController@update
还是其他端点?
我正在尝试了解您的要求,但对我来说有点模糊,所以如果我没看错,您正在尝试弄清楚 API 端点命名的最佳做法是什么,这真的取决于您将提供的功能以及您将如何公开文档。
但从我的角度来看,我没有看到在 URL 中链接用户 ID 和订户 ID 的理由,我推荐这样的东西,你可以在正文中传递你想要的所有信息
$router->post('settings/user/plan', 'Settings\SubscriptionController@subscribe');
$router->put('settings/user/plan', 'Settings\SubscriptionController@changeSubscriptionPlan');
$router->delete('settings/user/plan', 'Settings\SubscriptionController@cancelSubscription');
$router->post('settings/user/plan/resume', 'Settings\SubscriptionController@resumeSubscription');
$router->put('settings/user/card', 'Settings\SubscriptionController@updateCard');
$router->put('settings/user/vat', 'Settings\SubscriptionController@updateExtraBillingInfo');
$router->get('settings/user/plan/invoice/{id}', 'Settings\SubscriptionController@downloadInvoice');
如何定义端点完全取决于您
通常您不会在路由中传递用户 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
}
}
你的路线是这样的:
GET
user/subscription
列出所有用户订阅 index()
POST
user/subscription
创建用户订阅 store(Request $request)
GET
user/subscription/{subscription_id}
显示用户订阅 show($id)
PUT/PATCH
user/subscription/{subscription_id}
更新用户订阅 update($id)
DELETE
user/subscription/{subscription_id}
取消用户订阅 destroy($id)
如果您尝试 Braintree 或 Stripe 这两个支付网关可以轻松维护计划和订阅。
主要优点:-
- 更少的订阅和计划编码
- UI 已在 Braintree 树中准备就绪 drop-ui 其响应[=22=]
- 轻松附加 add-ons 费用