创建REST / JSON API

时间:2013-10-03 09:06:51

标签: java json api rest

由于我是REST Web服务的新手,我想问一些关于REST API的简单方法。我创建了一个Java应用程序,它通过REST使用以下方法提供数据:

@RequestMapping(value = "/JSON/ReceiveData/{metricOne}/{metricTwo}")
public @ResponseBody
String getData(@RequestParam("callback") String callback, @PathVariable String metricType,
                     @PathVariable String metricPeriod) {

    LinkedHashMap<String,String> map = new LinkedHashMap<String, String>();
    try{
        map = service.getData(metricOne, metricTwo);
    }catch(NullPointerException e){
        e.printStackTrace();
    }

    return callback+"("+t2JsonUtil.toJsonString(map)+")";
}

我为客户端应用程序创建了以下方法,以获取和反序列化到LinkedHashMap中的JSON对象:

public LinkedHashMap getDataClient(String metricOne, String metricTwo) {

    LinkedHashMap<String,String> map = null;

    try {

        URL url = new URL("http://localhost:8081/Metrics/Stats/JSON/ReceiveData/"+metricOne+"/"+metricTwo+"/?callback=");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "application/json");

        BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));

        String output = br.readLine();
        output = output.substring(1,output.length()-1);
        JsonFactory factory = new JsonFactory();
        ObjectMapper mapper = new ObjectMapper(factory);
        TypeReference<LinkedHashMap<String,String>> typeRef= new TypeReference<LinkedHashMap<String,String>>() {};
        map = mapper.readValue(output, typeRef);

        conn.disconnect();

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

  return map;

}

如果我想创建一个API以便为不同语言的应用程序提供此服务,我该怎么办?只需提供getDataClient中包含的URL即可?我很迷茫。如果有人可以给我一个关于此的解释(或一个小例子),我将非常感激。谢谢!

1 个答案:

答案 0 :(得分:3)

  

如果我想创建一个API以便提供此服务   不同语言的应用,我该怎么做?

Web服务的主要目的之一是允许异构(不同技术)系统之间的通信。 REST服务基于HTTP协议构建,因此任何支持HTTP通信的客户端技术都可以使用您的REST服务。

  

只提供getDataClient中包含的URL?

URL用于标识每个实体,但您可能必须提供其他信息,例如:输入参数详细信息,所需标头等。最好编写一个小规范或REST API使用指南,以帮助客户轻松无缝地使用您的服务。