[必読]リリース前注意事項

リリースに向けて必要な対応

TemPlatで自動生成されたアプリをリリース(一般公開)する際には、いくつか対応が必要です。
こちらを行わないとセキュリティ上のリスクを残す場合もございますので、必ずご確認ください。

Swaggerプラグインの無効化

Swaggerプラグインが有効のままだと、APIの一覧が公開されてしまうため、リリースの際には無効にすることをお勧めします。

詳しくはSwaggerプラグインのページをご確認ください。
Swaggerプラグインのページはコチラ

不要なAPIの削除

TemPlatで生成したアプリはERD定義してある全てのTableに対してAPIを生成します。そのため、開発完了時点でアプリでは使用しないAPIが存在することが少なくありません。
アプリでは使用しないAPIがある場合、当該APIが呼び出されて、予期せぬ自体が発生しないよう、不要なAPIを削除してください。
APIの削除はxxx_hanlder.goのメソッドを削除することによって行います。
例えば、GET/searchUsersを削除したい場合は、以下のハイライトされている部分(L24, L28-71)を削除してください。
これにより、APIが削除され、Swaggerからも当該APIが削除されます。

SERVER_ROOT/src/app/hanlder/xxx_handler.go等

package handler

import (
	"fmt"
	"main/constant"
	"main/model"
	"main/repository"
	"main/service"
	"main/util"
	"net/http"

	"github.com/labstack/echo/v4"
)

type userHandler struct {
	e  *echo.Group
	ur repository.UserRepository
	rm repository.Master
	sm service.Master
}

func NewUserHandler(e *echo.Group, ur repository.UserRepository, rm repository.Master, sm service.Master) {
	h := &userHandler{e, ur, rm, sm}
	e.GET("/users", h.searchUsers)
	e.GET("/user/:id", h.getUser)
}

// SearchUsers godoc
// @Summary search user
// @Description search user by search conditions
// @ID searchUser
// @Tags user
// @Accept  json
// @Produce  json
// @Param query query model.UserSearchCondition false "SearchCondition"
// @Success 200 {object} model.Users
// @Failure 400 {object} model.Response
// @Failure 404 {object} model.Response
// @Failure 500 {object} model.Response
// @Security firebase
// @Router /users [get]
func (h *userHandler) searchUsers(c echo.Context) error {
	params := &model.UserSearchCondition{}
	if err := c.Bind(params); err != nil {
		result := &model.Response{}
		result.Error = constant.InvalidRequestParameters
		util.Logger.Error(result.Error, err)
		return c.JSON(http.StatusBadRequest, result)
	}
	util.Logger.Debug(fmt.Sprintf("receive request:%#v", params))

	users, err := h.ur.GetAll(c, params)
	if err != nil {
		result := &model.Response{}
		result.Error = constant.DataBaseErrorOnSelect
		util.Logger.Error(result.Error, err)
		return c.JSON(http.StatusInternalServerError, result)
	}
	count, err := h.ur.Count(c, params)
	if err != nil {
		result := &model.Response{}
		result.Error = constant.DataBaseErrorOnSelect
		util.Logger.Error(result.Error, err)
		return c.JSON(http.StatusInternalServerError, result)
	}
	res := model.Users{
		Users: users,
		Count: count,
	}
	return c.JSON(http.StatusOK, res)
}

// GetUser godoc
// @Summary get user
// @Description get user
// @ID getUser
// @Tags user
// @Accept  json
// @Produce  json
// @Param id path string true "UserID"
// @Success 200 {object} model.User
// @Failure 400 {object} model.Response
// @Failure 404 {object} model.Response
// @Failure 500 {object} model.Response
// @Security firebase
// @Router /user/{id} [get]
func (h *userHandler) getUser(c echo.Context) error {
	id := c.Param("id")
	if len(id) == 0 {
		result := &model.Response{}
		result.Error = constant.InvalidRequestParameters
		util.Logger.Error(result.Error)
		return c.JSON(http.StatusBadRequest, result)
	}
	user, err := h.ur.Get(c, id)
	if err != nil {
		result := &model.Response{}
		result.Error = constant.DataBaseErrorOnSelect
		util.Logger.Error(result.Error, err)
		return c.JSON(http.StatusBadRequest, result)
	}
	if user == nil {
		result := &model.Response{}
		result.Error = constant.DataBaseErrorNoData
		util.Logger.Error(result.Error)
		return c.JSON(http.StatusNotFound, result)
	}
	return c.JSON(http.StatusOK, user)
}

認証/認可処理の確認

APIを全て一般公開する場合を除き、認証プラグインを用いて認証/認可処理を実装してください。
認証/認可処理を実装しないとAPIが全て一般公開され、どこからでもAPIの呼び出しが可能になり、セキュリティ上のリスクが高まります。

詳しくは認証プラグインのページをご確認ください。
認証プラグインのページはコチラ