从c ++或Ruby调用Spring Rest服务

时间:2014-12-31 19:22:56

标签: java spring rest

我正在学习Spring Rest服务,我对Spring rest服务有疑问

是否可以从其他语言(如c ++或Ruby)调用Spring Rest服务,其中c ++或Ruby将充当客户端和Spring Rest服务作为服务或资源提供者。

如果有可能,可以通过示例解释一些简单,详细的方式。

提出这个问题的原因是,如果我们使用Jax-ws开发Web服务,互操作性将在诸如从C ++调用基于Java的Web服务调用等技术中发生,反之亦然,使用Rest服务也会发生同样的事情。是在Spring Rest开发或使用Jersey api框架开发的。

2 个答案:

答案 0 :(得分:0)

REST呼叫只是一个http呼叫。该服务并不关心客户端编码的语言 - 可以是浏览器,手机,用c ++编写,java,c,objective-c,它并不重要。

通常,如果要将对象数据从客户端传递到服务,则应使用JSON或XML对其进行编码。

答案 1 :(得分:0)

是的,有可能。关键当然是序列化/反序列化数据。只要您的Rest服务接受序列化数据作为输入,并将序列化数据作为输出返回。

例如,假设您有一个端点http://www.example.com/public-api/foo,可接受的方法是GET(它提供数据)。

在Spring中,您有一个名为Foo.java的资源,它采用以下形式

class Foo implements Serializable {
     private static long serialVersionUID = -1L;

     private String someProperty;

     public Foo() {
         ...
     }

     public String getSomeProperty() { 
         return this.someProperty; 
     }

     public void setSomeProperty(String someProperty) {
         this.someProperty = someProperty;
     }

}

使用以下控制器

@Controller
@RequestMapping(value={"/"})
class FooController {

    @RequestMapping(value={"/foo"}, method={RequestMethod.GET})
    public HttpEntity<Foo> foo() {


        ...

        Foo foo = new Foo();

        ...

        return new ResponseEntity<ResourceSupport>(foo, HttpStatus.OK);

    }


}

当您在浏览器中访问它时,它将返回以下文本

{
   "_self": "http://www.example.com/public-api/foo",
   "someProperty": ...
}

这个输出(在JSON中)可以很简单地用Ruby和C ++(或任何语言)解析。

输入方式相同。您只需POST或PUT JSON数据,而不是解析JSON,这些数据符合您尝试输入的任何资源。要POST或PUT新的Foo对象,只需使用适当的属性POST或PUT JSON数据。