Php Laravel中的REST API订阅和事务(支付)端点
我正在开发一个web应用程序,我遵守RESTAPI标准。我正在搜索用于订阅和支付的RESTAPI最佳实践 当新用户订阅pro plan时,用户应该为该计划付费,这是一笔交易 我应该设置POST:users/{id}/subscriptions和SubscriptionsController@store新用户何时订阅 由于订阅是一个交易,在银行之前/之后有两个单独的请求,所以所有订阅代码都应该在SubscriptionController@store?Php Laravel中的REST API订阅和事务(支付)端点,php,laravel,rest,transactions,web-deployment,Php,Laravel,Rest,Transactions,Web Deployment,我正在开发一个web应用程序,我遵守RESTAPI标准。我正在搜索用于订阅和支付的RESTAPI最佳实践 当新用户订阅pro plan时,用户应该为该计划付费,这是一笔交易 我应该设置POST:users/{id}/subscriptions和SubscriptionsController@store新用户何时订阅 由于订阅是一个交易,在银行之前/之后有两个单独的请求,所以所有订阅代码都应该在SubscriptionController@store? 对于升级,我应该设置PUT:users/{i
对于升级,我应该设置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');
如何定义端点实际上取决于您自己我试图理解您的要求,但对我来说有点模糊,因此如果我说得对的话,您将试图找出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对象 关于你的问题,有很多选择,这完全取决于你,但一种可能的方法是使用一个用于此的 路由::资源'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
}
}
你的路线是这样的:
<?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
}
}
获取用户/订阅列表所有用户订阅索引
发布用户/订阅创建用户订阅storeRequest$request
获取用户/subscription/{subscription\u id}显示用户订阅显示$id
PUT/PATCH user/subscription/{subscription\u id}更新用户订阅更新$id
删除用户/subscription/{subscription\u id}取消用户订阅销毁$id通常您不会在路由中传递用户id,除非控制器中存在某种身份验证。管理员正在更新用户。而是在控制器中使用Auth::user对象 关于你的问题,有很多选择,这完全取决于你,但一种可能的方法是使用一个用于此的 路由::资源'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
}
}
你的路线是这样的:
<?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
}
}
获取用户/订阅列表所有用户订阅索引
发布用户/订阅创建用户订阅storeRequest$request
获取用户/subscription/{subscription\u id}显示用户订阅显示$id
PUT/PATCH user/subscription/{subscription\u id}更新用户订阅更新$id
删除用户/subscription/{subscription\u id}取消用户订阅销毁$id如果您尝试使用Braintree或通过轻松维护计划和订阅将支付网关分条
主要好处:-
减少订阅和计划的编码
在Braintree树中准备好UI drop UI及其响应
轻松附加附加费用
如果您尝试使用Braintree或Stripe,则可以通过轻松维护计划和订阅来实现支付网关
主要好处:-
减少订阅和计划的编码
在Braintree树中准备好UI drop UI及其响应
轻松附加附加费用
可能的副本。你的所有问题都在这篇评论中得到了回答,并得到了彻底的回答。请通读一下我为什么读了很多关于RESTAPI的内容。我找不到我的答案。在这些回答中,我的问题也没有确定的最佳实践。如果您有答案,请回答。您的意思是什么,因为订阅是一项交易,在银行之前/之后有两个单独的请求。还不够清楚。你在问什么真的不清楚。你可以随意设置自己的路线。您是否有特定的编程问题?@gayan订阅指定计划需要2个请求:1-在支付信用卡信息之前,以及。2-付款后确认付款。如果这两个请求成功,用户将订阅该计划。可能重复的。你所有的问题
这些问题在本评论中得到了回答,并得到了彻底的阐述。请通读一下我为什么读了很多关于RESTAPI的内容。我找不到我的答案。在这些回答中,我的问题也没有确定的最佳实践。如果您有答案,请回答。您的意思是什么,因为订阅是一项交易,在银行之前/之后有两个单独的请求。还不够清楚。你在问什么真的不清楚。你可以随意设置自己的路线。您是否有特定的编程问题?@gayan订阅指定计划需要2个请求:1-在支付信用卡信息之前,以及。2-付款后确认付款。若这两个请求成功,用户将订阅计划。我在控制器中使用auth->user。但我也在路由中获取用户id,并将其用于策略。我认为它更适合休息!我在控制器中使用auth->user。但我也在路由中获取用户id,并将其用于策略。我认为它更适合休息!