2017-03-07 39 views
0

如何合併兩個具有不同輸入參數和輸出值的外部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。

+0

如果不能修改客戶端應用程序以使用前綴(如foo.biz/api/),則需要評估傳入參數並使用一些啓發式來確定正在請求哪個版本的API V1/...' – CollinD

回答

0

只需按原樣保留舊的控制器,並添加具有不同端點的新控制器。

編輯:可以作爲不要求這兩種方法通過設定參數限制合併,並用盒裝整數鍵入:

@RequestParam(值=「限制」,需要=假)整數極限

這樣,您可以檢查設定的限制,如果是,那麼SearchRestful,否則SearchController的行爲。但上帝,這段代碼真的很糟糕,需要一個很好的重構。 :(