如何合併兩個具有不同輸入參數和輸出值的外部API?他們希望新的合併控制器向後兼容。我不相信有可能查看現有的代碼。我認爲有人將不得不改變輸入和結果合併兩個api的
package package1
@ResponseBody
@RequestMapping(method = RequestMethod.POST)
public class SearchController {
public ResponseEntity<String> request(@RequestBody String jsonSearch) {
Search1 search = gson.fromJson(jsonSearch, Search1.class);
List<Result1> results = search(search);
return renderSuccess(results);
}
public static List<Result1> search(Search1 search) {....}
}
public class Search1 {
private Calendar date;
private Foo foo
}
public class Result1 {
private Bar foo;
}
package package2
@RequestMapping(method = RequestMethod.POST)
public class SearchRestful {
public ResponseEntity<Bar> request(@RequestBody String jsonSearch2, @RequestParam(value = "limit") int limit) {
Search2 search2 = gson.fromJson(jsonSearch2, Search2.class);
Search1 search1 = transform(search2);
// Yes it really calls the search in the other package
List<Result1> results = SearchController.search(search1);
List<Result2> results2 = transformResults(results);
List<Result2> filteredResults2 = filter(results2, limit);
return renderSuccess(filteredResults2);
}
}
public class Search2 {
private Date date;
private String foo
}
public class Result2 {
private Foo foo;
}
我需要在不同的包
package package3
@ResponseBody
@RequestMapping(method = RequestMethod.POST)
public class SearchController {
// ?????
}
我應該用大約8個不同的控制器這樣做是爲了創建一個新的控制器多種方法。關於如何合併和保持向後兼容性的任何想法?他們想貶低舊的,並開始使用新的組合。它只被我公司創建的應用程序使用,目前沒有外部客戶端應用程序使用api,但我相信他們希望這是爲什麼他們希望清理它。
我告訴我的老闆,我們應該創建一個新的解決所有在兩個都完成的奇怪的事情,但不是試圖使兩個套件向後兼容。棄用package1和package2(保留但不再更新)並告訴用戶他們是否想要更改他們必須移動到package3並且只讓新應用連接到package3。
如果不能修改客戶端應用程序以使用前綴(如foo.biz/api/),則需要評估傳入參數並使用一些啓發式來確定正在請求哪個版本的API V1/...' – CollinD