Конечные точки подписок и транзакций (платежей) REST API в Laravel

Я занимаюсь разработкой веб-приложения и соблюдаю стандарты REST API. Я ищу лучшую практику REST API для подписки и платежей.

Когда новый пользователь подписывается на «Pro Plan», пользователь должен заплатить деньги за план, и это транзакция.

Должен ли я установить POST: users/{id}/subscriptions а также SubscriptionsController@store когда новый пользователь подписывается?

А поскольку подписка представляет собой транзакцию и 2 отдельных запроса (до / после банка), все коды подписки должны быть в SubscriptionController@store?

Для обновления, отмены или обновления плана я должен установить PUT: users/{id}/subscriptions/{id} а также SubscriptionController@update или другая конечная точка?

1

Решение

Обычно вы не передаете идентификатор пользователя в маршрут, если только в контроллере не было какой-либо аутентификации. например. Админ обновляет пользователя. Вместо этого используйте Auth::user() объект в контроллере.

Что касается вашего вопроса, есть много вариантов, и это зависит только от вас, но возможный способ сделать это будет использовать ресурсный маршрут \ контроллер за это.

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)

3

Другие решения

Если ваша попытка для Брейнтри или полоса оба платежных шлюза через планы Maintan и подписку.

Основные преимущества: —

  1. Меньше кодирования для подписки и плана
  2. Пользовательский интерфейс готов в дерево Брейнтри Drop-UI его отзывчивым
  3. Легко прикреплять надстройки обвинения
1

Я пытаюсь понять, о чем вы просите, но для меня это немного размыто, поэтому, если я правильно понял, вы пытаетесь понять, каков наилучший метод именования конечных точек API, это действительно зависит от функций, которые вы будете предоставлять, и от того, как Вы выставите документацию.

Но с моей точки зрения я не вижу смысла связывать идентификатор пользователя и идентификатор подписчика в URL, я рекомендую что-то вроде этого, и вы можете передать всю информацию, которую вы хотите в теле

$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');

Это действительно зависит от вас, как вы определяете свои конечные точки

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector