2013-12-23 161 views
0

我正在使用Jersey Restful webservices.I具有以下終點。實施可靠的Web服務最佳實踐?

@Path("/persons") 
public class PersonWS { 
    private final static Logger logger = LoggerFactory.getLogger(PersonWS.class); 

    @Autowired 
    private PersonService personService; 

    @GET 
    @Path("/{id}") 
    @Produces({MediaType.APPLICATION_XML}) 
    public Person fetchPerson(@PathParam("id") Integer id) { 
     return personService.fetchPerson(id); 
    } 

    @POST 
    @Path("/add") 
    @Consumes(MediaType.APPLICATION_XML) 
    @Produces (MediaType.APPLICATION_XML) 
    public Person addPerson(Person person) { 
     personService.addPerson(person); 
     return person; 
    } 
} 

上面的類沒有實現任何接口。我應該先寫接口並在PersonWS.java中實現接口的方法嗎?或者不需要在這裏寫任何接口?

謝謝!

回答

2

有一個接口的唯一的一點是提供一個不同的實現的選項。通常除了主要的唯一的其他實現是用於測試的模擬。然而,現代嘲諷框架將輕鬆地嘲笑你的實現類,而不需要單獨的界面。在早些時候,接口對於動態代理(Spring AOP)實現的方法攔截器等技術來說也是必需的,但是這一要求已經被加載時編織和其他現代技術所淘汰。

由於這些原因,我發現在現代應用程序體系結構中任何真正的好處都是不合理的,因此在接口中維護所有方法的重複的開銷會很大。

+0

Marko,那麼我應該刪除一個接口,並單獨繼續課?謝謝! – user755806

+0

是的。如果在任何時候你碰到了一個只能通過引入接口(不太可能)才能跨越的牆,那麼在那裏和那裏引入接口將會很容易。 –

0

提供接口的另一個原因是允許在需要的情況下將控制器注入另一個接口(例如使用spring)或者想要跨模塊共享和分配應用程序的合同:您的合同jar將包含領域和接口 - 無需考慮實現,也無需將所有實現嵌入到所有模塊中。

這可以被認爲是一種很好的做法,因爲它提供了鬆散的耦合,並準備不斷髮展和增長,但如果不需要它,技術上就不需要提供接口。

+0

我不會推薦這樣共享控制器,因爲它們是特定於REST線API的。如果有業務邏輯共享,那麼控制器應該將工作委派給協作者對象,協作者對象可能通過已聲明的接口進行訪問。這樣,邏輯變得更加可重用,並且其API將與臨時需求和對REST API的更改分離。 –