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の呼び出しが可能になり、セキュリティ上のリスクが高まります。
詳しくは認証プラグインのページをご確認ください。
認証プラグインのページはコチラ