CXF JAX-RS 首选语义

3
我想知道在CXF XML上下文文件中jaxrs:server配置的首选语义是什么。
例如,如果我有两个服务实现,针对用户和订单,它们可以从相对路径"/user""/order"访问。
我应该这样配置服务:
<jaxrs:server id="userService" address="/user">
    <jaxrs:serviceBeans>
        <bean class="com.example.UserServiceImpl />
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" />
    </jaxrs:providers>
</jaxrs:server>

<jaxrs:server id="orderService" address="/order">
    <jaxrs:serviceBeans>
        <bean class="com.example.OrderServiceImpl />
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" />
    </jaxrs:providers>
</jaxrs:server>

或者这样做:
<jaxrs:server id="appService" address="/">
    <jaxrs:serviceBeans>
        <!-- 
            Path configured using @Path annotations on the class definition:

            @Path(value="/user")
            public class UserServiceImpl {...}
        -->
        <bean class="com.example.UserServiceImpl />
        <bean class="com.example.OrderServiceImpl />
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" />
    </jaxrs:providers>
</jaxrs:server>

看起来这只是一个语义上的区别。第二种方式允许我们不重复提供者。但我想知道在执行此配置时应考虑哪些因素?

谢谢!


通常将RESTful服务分组为“资源”是有意义的,通常在资源级别上会有一个@path,例如“/user”,每种方法都会有一个,例如“/add”,“/delete”等。因此,在我看来,您帖子中的第一种选项是有意义的。但这完全取决于手头的需求... - spal
2个回答

1
我使用第二种方法,尽量将相关的服务分组在一起...如果您可以为特定用户获得订单,则它们是相关的。因此,我通常有一个“v1” api服务器(支持版本控制),一个用于文档的服务器(我在那里使用不同的提供程序或扩展映射),一个用于专门访问(比如更严格的安全管理)等。
但我会使用某些地址而不是留空,例如“api”或至少版本“v1”。
换句话说,您的cxf.xml文件可以充满jaxrs服务器。如果它们相关,则很少需要不同的提供程序、映射和扩展。
但是这个问题涉及到意见,可能会被关闭。

0
我通常会将它们分组,如果它们具有相同的基础地址。假设我们有像这样的资源URL:
<jaxrs:server id="userService" address="api/user">
</jaxrs:server>

<jaxrs:server id="orderService" address="api/order">
</jaxrs:server>

as

<jaxrs:server id="appService" address="/api">
    <jaxrs:serviceBeans>
        <!-- 
            @Path(value="/user")
         -->
        <bean class="com.example.UserServiceImpl />
        <bean class="com.example.OrderServiceImpl />
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" />
    </jaxrs:providers>

如果它们具有不同的基本URL,需要单独处理。

/profile/user
/cart/orders 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接