我有一個 Spring MVC 控制器,但我不確定它的設計是好是壞。據我所知,缺少 api 版本控制,但除此之外,我為檔案實作了 Swagger 并添加了 SpringSecurity 并嘗試遵循 YARAS(又一個 RESTful API 標準)來構建它,但我需要另一只眼來評論它。
@Slf4j
@Controller
@RequestMapping
@RequiredArgsConstructor
public class XGameController implements GameController {
private final GameService gameService;
private final ObjectMapper mapper;
@RequestMapping(value = "/", method= RequestMethod.GET)
public String index() {
return "game";
}
@RequestMapping(value = "/login", method= RequestMethod.GET)
public String login() {
return "login";
}
@Secured("ROLE_USER")
@RequestMapping(value = "/games", method= RequestMethod.POST)
public String initializeGame(Model model) {
log.info("New XGame is initializing...");
Game game = new Game();
game = gameService.initializeGame(game.getId());
try {
model.addAttribute("game", mapper.writeValueAsString(game));
} catch (JsonProcessingException e) {
log.error(e.getMessage());
}
log.info("New XGame is initialized successfully!");
return "game";
}
@Secured("ROLE_USER")
@RequestMapping(value = "/games/{gameId}", method= RequestMethod.PUT)
public @ResponseBody Game play(@PathVariable("gameId") String gameId,
@RequestParam Integer pitNumber,
@RequestParam String action) {
log.info("Sowing stone is triggered...");
return gameService.executeGameRules(UUID.fromString(gameId), pitNumber);
}
@RequestMapping(value = "/403", method= RequestMethod.GET)
public String error403() {
return "/error/403";
}
}
我的招搖快照;

uj5u.com熱心網友回復:
我會做一些改變。
在
/games/{gameId}我會使用PATCH而不是PUT. 原因是它PUT旨在完全替換資源(在您的情況下,是Game)。這似乎不是您在此端點中所做的。PATCH旨在部分更新資源,這似乎更適合您在此處執行的操作。仍然在
/games/{gameId}我將使用請求正文來提供所需的資料而不是查詢引數。這似乎不太對。查詢引數的方式更適合于GET要求比POST,PUT或PATCH。我會重命名
/403為其他的東西,它實際上給出了一些關于什么的背景關系403。說到這里,我會和/error-pages/403. 此外,我還會考慮從 swagger 規范中洗掉此端點。
除此之外,我覺得還好。
uj5u.com熱心網友回復:
一些建議:
使用代表背景關系或您的想法的路徑,
controller您可以添加version@RequestMapping("/V1/xgame")使用專門的注釋,如:
@GetMapping,@PostMapping等...對于
/403使用意味著全名,如/errors使用您將回傳給用戶的自定義訊息。為此,您需要一個ControllerAdvice。
谷歌關于模式和最佳實踐Rest API 設計
閱讀一些書籍以更好地理解。
uj5u.com熱心網友回復:
首先,代替@RequestMapping使用特定的映射(Get、Post 等)并且映射型別的使用取決于您,您會發現使用它的原因更具體
如果您從頁面重定向到主頁,請嘗試使用 return " redirect :" /url "" 而不是直接回傳 HTML 檔案。
將您的錯誤方法重命名為一些更合理的名稱,RequestMapping 值。
而不是使用return "/error/403" 使用return "redirect:/error/403"
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/343498.html
上一篇:在API內的嵌套物件中實作價值
