rest之Http访问方式

  最近的一段时间一直在研究有关rest的资料。相信有不少人也都或多或少的接触过rest架构。rest是一直新的规范,现在java中,.net中也都有针对rest开发的一些框架。我最近也研究了不少框架,但最后还是决定用http的方式来访问rest结构的数据。即使用Http的GET,PUT,POST和DELETE来对rest结构的数据进行操作。

  因为我是做java的,所以我主要针对java来说。java中实现Http访问rest,主要是通过一个类,HttpURlconnection,使用这个类来实现的。下面请看一下代码:

    /**
     * 执行REST的post方法
     * @param urlStr
     * @param param
     * @param accept
     * @return 成功:true / 失败:false
     * @throws Exception
     * 
     * @author*/
    public static String doPost(String urlStr, String param, String accept)
            throws Exception {
        boolean state = false;
        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        // 设置发送请求的方式
        conn.setRequestMethod(SERVLET_POST);
        // 设置参数的格式类型
        conn.setRequestProperty("Content-Type", accept);
        // 打开输入输出,在output中传输参数
        conn.setDoInput(true);
        conn.setDoOutput(true);
        OutputStream os = conn.getOutputStream();
        // 把参数写入output流,使用UTF-8编码
        os.write(param.getBytes("utf-8"));
        os.close();
        // 正常时返回的状态码为200
        if (conn.getResponseCode() == 200) {
            state = true;
            // 获取返回的内容
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            // 输出返回的信息
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
                return line;
            }
            br.close();
        } else {
            System.out.println(SERVLET_POST + " [ERROR] CODE: "
                    + conn.getResponseCode());
        }
        return "get error:no value";
    }

这是针对post方法来说的,可以使用这个方法,来传到你想要传的webservice接口,并返回一个数据。

下面这个方法是GET方法,主要用来获取数据的:

/**
     * 执行REST的get方法
     * @param urlStr
     * @param accept
     * @return REST返回的数据
     * @throws Exception
     * 
     * @author*/
    public static String doGet(String urlStr, String accept)
            throws Exception {
        String state = "";
        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        // 设置发送请求的方式
        conn.setRequestMethod(SERVLET_GET);
        // 设置返回信息的格式类型
        conn.setRequestProperty("Accept", accept);
        conn.connect();
        // 正常时返回的状态码为200
        if (conn.getResponseCode() == 200) {
            // 获取返回的内容
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            // 输出返回的信息
            while ((line = br.readLine()) != null) {
                state += line;
            }
            br.close();
        } else {
            System.out.println(SERVLET_GET + " [ERROR] CODE: "
                    + conn.getResponseCode());
        }
        return state;
    }

下面这个PUT方法,可以用来保存REST数据,也可以写入数据库中,目前我们使用的是非关系型数据库:

/**
     * 执行REST的put方法
     * @param urlStr
     * @param param
     * @param accept
     * @return 成功:true / 失败:false
     * @throws Exception
     * 
     * @author*/
    public String doPut(String urlStr, String param, String accept)
            throws Exception {
        boolean state = false;
        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        // 设置发送请求的方式
        conn.setRequestMethod(SERVLET_PUT);
        // 设置参数的格式类型
        conn.setRequestProperty("Content-Type", accept);
        // 打开输入输出,在output中传输参数
        conn.setDoInput(true);
        conn.setDoOutput(true);
        OutputStream os = conn.getOutputStream();
        // 把参数写入output流,使用UTF-8编码
        os.write(param.getBytes("utf-8"));
        os.close();
        // 正常时返回的状态码为200
        if (conn.getResponseCode() == 200) {
            state = true;
            // 获取返回的内容
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            // 输出返回的信息
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
                return line;
                
            }
            br.close();
        } else {
            System.out.println(SERVLET_PUT + " [ERROR] CODE: "
                    + conn.getResponseCode());
        }
        return "return error:put failure";
    }

最后一个DELETE方法,用来删除数据的方法:

/**
     * 执行REST的delete方法
     * @param urlStr
     * @param accept
     * @return REST返回的数据
     * @throws Exception
     * 
     * @author*/
    public String doDelete(String urlStr, String accept) 
            throws Exception {
        boolean state = false;
        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        // 设置发送请求的方式
        conn.setRequestMethod(SERVLET_DELETE);
        // 设置返回信息的格式类型
        conn.setRequestProperty("Accept", accept);
        // 正常时返回的状态码为200
        if (conn.getResponseCode() == 200) {
            
            return "success";
        } else {
            System.out.println(SERVLET_DELETE + " [ERROR] CODE: "
                    + conn.getResponseCode());
        }
        return "";
    }
原文地址:https://www.cnblogs.com/shunxiyuan/p/2472113.html