Golang中的RESTful服务应该包括客户端界面吗?

时间:2016-01-18 11:42:36

标签: rest go

如果我在Golang中开发Booking REST服务(即在包裹预订中)。这是" GO方式"创建允许业务操作的BookingClient接口(由struct备份),以便我的restful服务的客户端使用BookingClient(从包裹预订中导入)而不是直接发送http请求?

3 个答案:

答案 0 :(得分:2)

一般情况下,不会 - 如果您使用特定语言提供客户端,那么这只是一种便利,因此(某些)用户可以更轻松地使用您的API。这当然假设您的客户设计得很好。我不会仅仅在Go中提供一个接口来指示一组可能的API调用。这对于非常狭窄的受众群体是有益的,可能对于那些为您自己开发客户端的人来说,编程语言恰好与服务器的实现相同。即使这样,他们也可能不喜欢使用界面的想法(例如,他们可能只需要一组特定的方法)。

如果您想为您的API提供客户端,请继续,执行此操作,但将其与实际服务器(不同的软件包,甚至是不同的repo)分开。通常,可以通过HTTP开发API,以允许广泛的客户端访问它,可以用任何语言编写。我没有提供一些接口,而是花时间写一篇好的文档。

在我看来,如果您问自己是否应该在Python中提供客户端,那么假设没有提供更多上下文,您的问题的答案应该没有什么不同。例如,如果您的API由您的公司内部使用并且您主要在Go中开发,则整个情况可能会发生变化。

答案 1 :(得分:1)

通常最好这样做,大多数公司都这样做,但提供直接使用API​​的文档。其主要用例是使用不同于您预期语言的人。

您可以查看我编写的新RESTful框架,其中包括使用Go模板自动编译客户端的基础结构,尽管我还没有编写Go客户端编译器。如果你想写一个,将非常感谢:) https://github.com/EverythingMe/vertex

答案 2 :(得分:1)

测试在Go中很重要,因此编写可测试代码是您应该做的事情。如果使用直接的http请求,与使用模拟结构相比,编写单元测试将会更加困难。

有没有理由使用Client而不是调用调用REST端点的函数?模拟更大的东西(例如Client结构)而不是一组小函数通常更难。

您应该将客户端置于booking.Client以避免重复自己(booking.BookingClient),并可能将Client重命名为更具描述性的内容。