編寫RESTFul api應用程序的最佳實踐之一是添加版本控制。例如:使用Spring實現REST Api
http://my-server/api/v1/getData
http://my-server/api/v2/getData
我們的應用程序公開了使用Spring框架的REST API。我們將一個類標記爲Controller,使用RequestMapping註釋將URL映射到一個函數,並添加一些被翻譯成json對象的對象。
例如:
@RequestMapping(method = RequestMethod.POST, value = "/api/v1/getData")
public @ResponseBody ResponseDataDTO getData(@RequestBody OperationsDetailsTDO details) {...}
現在,我們希望提供API的第二個版本。大約2/3的功能保持不變,1/3正在改變。這些更改都是在邏輯和JSON對象中進行的。
我想知道如何設計代碼。我認爲,這種代碼是難以管理:
@RequestMapping(method = RequestMethod.POST, value = "/api/{version-var}/getData")
public @ResponseBody ResponseDataDTO createReleaseFromTemplate(@PathVariable("version-var") Integer version, @RequestBody OperationsDetailsTDO details) {
if (version == 1)
{
doForVersion1();
}
else if (version == 2)
{
doForVersion2();
}
}
這將是難以管理,因爲每個功能會有不同的分支。爲了演示這個問題,如果我有一個自動生成文檔的工具 - 它將無法理解API是什麼。
其次,我不知道該怎麼處理綁定到JSON對象的類。我是否需要複製所有這些類,以進行較小的更改?
Thx。
相關http://stackoverflow.com/questions/389169/best-practices-for-api-versioning – andyb
畢竟這是一個不同的API。你必須改變使用它的任何東西。 –