name: Автоматическое создание документации для API

sort: 2

Автоматическое создание документации для API

Автоматическая документация это очень крутая возможность которую мы хотели иметь. Сейчас это стало реальностью с BeeGo. Как я сказал, BeeGo не только ускоряет разработку API, но также делает API легко используемым для пользователя. Хорошо, давайте попробуем создать документацию, для этого вам надо просто создать новое API приложение с помощью команды bee api beeapi.

Глобальные настройки API

Добавьте комментарий в самый верх routers/router.go:

  1. // @APIVersion 1.0.0
  2. // @Title mobile API
  3. // @Description mobile has every tool to get any job done, so codename for the new mobile APIs.
  4. // @Contact astaxie@gmail.com
  5. package routers

Этот комментарий устанавливает глобальную информацию. Вот список доступных параметров:

  • @APIVersion
  • @Title
  • @Description
  • @Contact
  • @TermsOfServiceUrl
  • @License
  • @LicenseUrl

Разбор путей

Прямо сейчас, создание автоматической документации для API поддерживает только namespace + Include и парсит только первые два уровня вложенности. Первый уровень это версия API, а второй уровень это модули.

  1. func init() {
  2. ns :=
  3. beego.NewNamespace("/v1",
  4. beego.NSNamespace("/customer",
  5. beego.NSInclude(
  6. &controllers.CustomerController{},
  7. &controllers.CustomerCookieCheckerController{},
  8. ),
  9. ),
  10. beego.NSNamespace("/catalog",
  11. beego.NSInclude(
  12. &controllers.CatalogController{},
  13. ),
  14. ),
  15. beego.NSNamespace("/newsletter",
  16. beego.NSInclude(
  17. &controllers.NewsLetterController{},
  18. ),
  19. ),
  20. beego.NSNamespace("/cms",
  21. beego.NSInclude(
  22. &controllers.CMSController{},
  23. ),
  24. ),
  25. beego.NSNamespace("/suggest",
  26. beego.NSInclude(
  27. &controllers.SearchController{},
  28. ),
  29. ),
  30. )
  31. beego.AddNamespace(ns)
  32. }

Комментарии приложения

Очень важная вещь это комментарии. Для примера:

  1. package controllers
  2. import "github.com/astaxie/beego"
  3. // CMS API
  4. type CMSController struct {
  5. beego.Controller
  6. }
  7. func (c *CMSController) URLMapping() {
  8. c.Mapping("StaticBlock", c.StaticBlock)
  9. c.Mapping("Product", c.Product)
  10. }
  11. // @Title getStaticBlock
  12. // @Description get all the staticblock by key
  13. // @Param key path string true "The email for login"
  14. // @Success 200 {object} models.ZDTCustomer.Customer
  15. // @Failure 400 Invalid email supplied
  16. // @Failure 404 User not found
  17. // @router /staticblock/:key [get]
  18. func (c *CMSController) StaticBlock() {
  19. }
  20. // @Title Get Product list
  21. // @Description Get Product list by some info
  22. // @Success 200 {object} models.ZDTProduct.ProductList
  23. // @Param category_id query int false "category id"
  24. // @Param brand_id query int false "brand id"
  25. // @Param query query string false "query of search"
  26. // @Param segment query string false "segment"
  27. // @Param sort query string false "sort option"
  28. // @Param dir query string false "direction asc or desc"
  29. // @Param offset query int false "offset"
  30. // @Param limit query int false "count limit"
  31. // @Param price query float false "price"
  32. // @Param special_price query bool false "whether this is special price"
  33. // @Param size query string false "size filter"
  34. // @Param color query string false "color filter"
  35. // @Param format query bool false "choose return format"
  36. // @Failure 400 no enough input
  37. // @Failure 500 get products common error
  38. // @router /products [get]
  39. func (c *CMSController) Product() {
  40. }

Мы написали комментарий выше для CMSController который будет показывать этот модуль. Теперь нам нужно написать комментарии для каждой функции. Ниже представлены поддерживаемые опции:

  • @Title

    Название для этого API. Это строка, весь контент после первого пробела будет считан как название

  • @Description

    Описание для этого API. Это строка, весь контент после первого пробела будет считан как описание

  • @Param

    @Param определяет какие параметры надо послать серверу. Имеется пять колонок для каждого @Param:

    1. название параметра;
    2. тип параметра; Это может быть formData, query, path, body или header. formData означает что параметр посылается как POST( значение Content-Type устанавливается как application/x-www-form-urlencoded). query означает что параметр передается в URL как GET. path означает что параметр это часть URL. body означает что параметр передается как raw data в теле запроса. header означает что параметр присутствует в заголовках запроса.
    3. тип данных параметра;
    4. обязательный;
    5. комментарий;
  • @Success

    Сообщение которое будет возвращено на клиент в случае успеха. Три параметра.

    1. Код статуса.
    2. Возвращаемый тип; Может быть обёрнут в {}.
    3. Возвращаемые данные; Может быть объектом или строкой. Для {object}, используйте путь и название объекта в вашем проекте и bee tool будет смотреть прямиком в объект когда будет создавать документацию. Для примера models.ZDTProduct.ProductList представляет объект ProductList из /models/ZDTProduct

      Используйте пробелы для разделения этих параметров

  • @Failure

    Сообщение которое будет возвращено на клиент в случае неудачи. Два параметра.

    1. Код статуса.
    2. Сообщение об ошибке.

      Используйте пробелы для разделения этих параметров

  • @router

    Информация о роутинге. Два параметра.

    1. Адрес запроса
    2. Поддерживаемые методы запроса. Оборачивается в []. Используйте , для разделения методов если их несколько.

      Используйте пробелы для разделения этих параметров

Создаем документацию автоматически

Что бы заставить это работать сделайте несколько шагов:

  1. Включите документацию задав EnableDocs = true в conf/app.conf
  2. Импортируйте _ "beeapi/docs" в main.go
  3. Используйте bee run -downdoc=true -gendoc=true для запуска вашего API приложения и ребилда документации
  4. Откройте swagger document from API project's URL and port. (see item #1 below)

Документация вашего API готова. Откройте браузер и проверьте результат.

Автоматическое создание документации для API - 图1

Автоматическое создание документации для API - 图2

Проблемы которые могут возникнуть

  1. CORS Есть два решения

    1. Встройте swagger в ваше приложение. Скачайте swagger и положите его в папку проекта. (bee run -downdoc=true эта команда может сделать тоже самое, скачать и положить в ваш проект нужные файлы) И добавьте эти строки после функции beego.Run() в func main() в файле main.go

      if beego.RunMode == “dev” {

      1. beego.DirectoryIndex = true
      2. beego.StaticDir["/swagger"] = "swagger"

      }

      Теперь зайдите на swagger документацию.

    2. Сделайте API поддерживающим CORS

      1. ctx.Output.Header("Access-Control-Allow-Origin", "*")
  2. Другие проблемы. Это используется в проектах разработчиков BeeGo, но если у вас будут проблемы неописанные здесь, пожалуйста создайте issues для нас.