Версии Laravel API - Как управлять общими функциями между версиями? - PullRequest
1 голос
/ 02 апреля 2019

Я использую Laravel 5 и создаю веб-сервис для приложения, которое требует API-версий.Это структура папок, которую я обнаружил на разных веб-ресурсах

/app
  /controllers
    /Api
      /v1
        /UserController.php
      /v2
        /UserController.php

Проблема в том, что в UserController есть много функций, которые, скорее всего, не изменятся между версиями, или к каждомуверсия.Например, есть функция logout, которая отправляет сообщение пользователю после выхода из системы.Если я копирую эту функцию в каждом UserController, то любое незначительное изменение, скажем, изменение сообщения или что-то подобное, заставляет меня менять каждый UserController в разных версиях.В результате я решил создать BaseUserController и вставить туда общие функции, и каждый Usercontroller должен наследовать это.Я имею в виду это

/app
  /controllers
    /Api
      /BaseUserController.php extends Controller.php
      /v1
        /UserController.php extends BaseUserController.php
      /v2
        /UserController.php extends BaseUserController.php

, поэтому, если какой-либо версии необходимо реализовать свою собственную logout, просто она переопределяет свою родительскую функцию или для любого глобального изменения я изменяю функцию в родительском.

Я хотел бы спросить вас, это хорошая стратегия для реализации API-версий?а в чем проблема с этим?

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 02 апреля 2019

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

/app
 /services
  /UserService.php

Опять же, это личное предпочтение, и оно работает для меня.

1 голос
/ 02 апреля 2019

Как @GreedChikara сказал, что это своего рода личный выбор ... Моя структура выглядит следующим образом ...

/app
  /controllers
    /Api
      /UserController.php
      /v2/
        /UserControllerV2.php

И что я делаю для уменьшения дублирования - всегда расширяйте предыдущую версию и переопределяйте методы, которые должны вести себя иначе, чем в предыдущей версии -

class UserControllerV2 extends UserController {


    /**
     * Create a new controller instance.
     */
    public function __construct() {

        parent::__construct();
    }

    ##Overridden methods.....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...