`
zhoumeng87
  • 浏览: 70275 次
文章分类
社区版块
存档分类
最新评论

java web api接口调用

阅读更多

Web Services 被W3C进行了标准化定义。

Web Services 发布到网上,可以公布到某个全局注册表,自动提供服务URL,服务描述、接口调用要求、参数说明以及返回值说明。比如中国气象局可以发布天气预报服务。所有其它网站或手机App如果需要集成天气预报功能,都可以访问该Web Service获取数据。

Web Services 主要设计目标是提供公共服务。

Web Services 全部基于XML。按照W3C标准来描述服务的各个方面(参数、参数传递、返回值及服务发布发现等)。要描述清楚Web Services标准的各个方面,可能需要2000页的文档。
Web Services 还有标准的身份验证方式(非公共服务时验证使用者身份)。

轻量化的Web API

公司内部使用的私有服务,我们知道它的接口Url,因此不需要自动发现它。我们有它的服务接口文档,因此也不需要自动描述和自动调用。
即使Web Services的特性 官网:www.fhadmin.org(自动发现、自动学会调用方式)很美好,但私有服务往往不需要这些。

Web API一般基于HTTP/REST来实现,什么都不需要定义,参数(输入的数据)可以是JSON, XML或者简单文本,响应(输出数据)一般是JSON或XML。它不提供服务调用标准和服务发现标准。可以按你服务的特点来写一些简单的使用说明给使用者。

获取远程数据的方式正在从Web Services向Web API转变。

Web Services的架构要比Web API臃肿得多,它的每个请求都需要封装成XML并在服务端解封。因此它不易开发且吃更多的资源(内存、带宽)。性能也不如Web API。

   

  /**
     * 根据指定url,编码获得字符串 官网:www.fhadmin.org
     * 
     * @param address
     * @param Charset
     * @return
     */
    public static String getStringByConAndCharset(String address, String Charset) {

        StringBuffer sb;
        try {
            URL url = new URL(address);

            URLConnection con = url.openConnection();
            BufferedReader bw = new BufferedReader(new InputStreamReader(con.getInputStream(), Charset));
            String line;
            sb = new StringBuffer();
            while ((line = bw.readLine()) != null) {
                sb.append(line + "\n");
            }
            bw.close();
        } catch (Exception e) {
            e.printStackTrace();
            sb = new StringBuffer();
        }

        return sb.toString();
    }

    /**
     * 通过post方式获取页面源码
     * 
     * @param urlString
     *            url地址
     * @param paramContent
     *            需要post的参数
     * @param chartSet
     *            字符编码(默认为ISO-8859-1)
     * @return
     * @throws IOException
     */
    public static String postUrl(String urlString, String paramContent, String chartSet, String contentType) {
        long beginTime = System.currentTimeMillis();
        if (chartSet == null || "".equals(chartSet)) {
            chartSet = "ISO-8859-1";
        }

        StringBuffer result = new StringBuffer();
        BufferedReader in = null;

        try {
            URL url = new URL((urlString));
            URLConnection con = url.openConnection();

            // 设置链接超时
            con.setConnectTimeout(3000);
            // 设置读取超时
            con.setReadTimeout(3000);
            // 设置参数
            con.setDoOutput(true);
            if (contentType != null && !"".equals(contentType)) {
                con.setRequestProperty("Content-type", contentType);
            }

            OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream(), chartSet);
            writer.write(paramContent);
            writer.flush();
            writer.close();
            in = new BufferedReader(new InputStreamReader(con.getInputStream(), chartSet));
            String line = null;
            while ((line = in.readLine()) != null) {
                result.append(line + "\r\n");
            }
            in.close();
        } catch (MalformedURLException e) {
            logger.error("Unable to connect to URL: " + urlString, e);
        } catch (SocketTimeoutException e) {
            logger.error("Timeout Exception when connecting to URL: " + urlString, e);
        } catch (IOException e) {
            logger.error("IOException when connecting to URL: " + urlString, e);
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (Exception ex) {
                    logger.error("Exception throws at finally close reader when connecting to URL: " + urlString, ex);
                }
            }
            long endTime = System.currentTimeMillis();
            logger.info("post用时:" + (endTime - beginTime) + "ms");
        }
        return result.toString();
    }

    /**
     * 发送https请求 官网:www.fhadmin.org
     * @param requestUrl  请求地址
     * @param requestMethod  请求方式(GET、POST)
     * @param outputStr  提交的数据
     * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
     * @throws NoSuchProviderException 
     * @throws NoSuchAlgorithmException 
     */
    public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) throws Exception {
        JSONObject json = null;
        // 创建SSLContext对象,并使用我们指定的信任管理器初始化
        TrustManager[] tm = { new MyX509TrustManager() };
        SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
        sslContext.init(null, tm, new java.security.SecureRandom());
        // 从上述SSLContext对象中得到SSLSocketFactory对象
        SSLSocketFactory ssf = sslContext.getSocketFactory();

        URL url = new URL(requestUrl);
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        conn.setSSLSocketFactory(ssf);

        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setUseCaches(false);
        // 设置请求方式(GET/POST)
        conn.setRequestMethod(requestMethod);

        // 当outputStr不为null时向输出流写数据
        if (null != outputStr) {
            OutputStream outputStream = conn.getOutputStream();
            // 注意编码格式
            outputStream.write(outputStr.getBytes("UTF-8"));
            outputStream.close();
        }

        // 从输入流读取返回内容
        InputStream inputStream = conn.getInputStream();
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String str = null;
        StringBuffer buffer = new StringBuffer();
        while ((str = bufferedReader.readLine()) != null) {
            buffer.append(str);
        }

        // 释放资源
        bufferedReader.close();
        inputStreamReader.close();
        inputStream.close();
        inputStream = null;
        conn.disconnect();
        json = JSON.parseObject(buffer.toString());
        String errcode = json.getString("errcode");
        if (!StringUtil.isBlank(errcode) && !errcode.equals("0")) {
            logger.error(json.toString());
            throw new SysException("ERRCODE:"+ errcode);
        }
        return json;
    }

}

分享到:
评论

相关推荐

    java调用webapi

    Java调用WebAPI是开发过程中常见的任务,尤其是在分布式系统或者微服务架构中,不同服务间通过API进行数据交互。WebAPI通常指的是Web应用程序提供的接口,允许客户端(如Java应用)发送HTTP请求并接收响应。本压缩包...

    JAVA调用webApi完整jar包 httpclient 等等

    java调用.NET webAPI httpclient-4.2.5.jar httpclient-cache-4.2.5.jar httpcore-4.2.4.jar httpmime-4.2.5.jar fluent-hc-4.2.5.jar commons-codec-1.6.jar

    WebApi系列-通过HttpClient来调用WebApi接口.doc

    ### WebApi系列-通过HttpClient来调用WebApi接口 #### 一、概述 在现代Web开发中,Web API已经成为一种非常流行的模式,用于提供服务端与客户端之间的数据交互。随着.NET Framework以及.NET Core的发展,微软提供...

    webapi调用的方法

    WebAPI调用是软件开发中常见的一种技术,主要用于应用程序与服务器端进行数据交互。在这个场景中,我们讨论的是一个名为"opensinaapi1.0beta3"的压缩包,它包含了一个用于测试新浪API的代码库。新浪API是新浪提供的...

    java的API接口文档模板

    Java API接口文档模板详解 Java API接口文档模板是Java初学者必须掌握的重要知识点之一。该文档模板提供了详细的接口输入输出定义,旨在帮助前后端开发人员快速了解和使用接口。下面我们将对该文档模板进行详细解释...

    K3 Cloud WebAPI接口说明书_V4.0.docx

    K3 Cloud WebAPI 接口说明书 K3 Cloud WebAPI 是 Kingdee 软件公司开发的一款基于云计算的 Web API 接口,旨在提供一套统一、灵活、可扩展的接口解决方案,帮助企业快速集成云端应用程序和第三方系统。下面是 K3 ...

    java调用soap接口案例

    Java调用SOAP(Simple Object Access Protocol)接口是Web服务交互中的常见操作,SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。本案例主要关注如何使用Java来实现SOAP请求并获取响应,具体我们...

    K3 Cloud WebAPI 及DEMO(Java版本)

    【K3 Cloud WebAPI】是金蝶公司为其云端企业资源规划系统K/3Cloud提供的一种基于Web服务的应用程序接口,允许开发者使用编程语言与K/3Cloud系统进行交互,实现数据的读取、写入以及业务流程的自动化。在本案例中,...

    K3 Cloud WebAPI接口文档V1.0.docx

    K3 Cloud WebAPI 接口文档 K3 Cloud WebAPI 接口文档是 Kingdee BOS 云平台的接口文档,旨在提供给开发者使用 K3 Cloud WebAPI 进行集成和开发的参考指南。本文档详细介绍了 K3 Cloud WebAPI 的架构、技术栈、接口...

    java调用C#接口及所涉及到的架包

    总结,Java调用C#接口主要依赖于Web服务技术,包括SOAP和RESTful。Java开发者需要理解相关Java库,如JAX-WS和JAXB,以及如何生成和使用客户端代理类。同时,考虑接口设计、数据转换、性能和错误处理等因素,以确保跨...

    java调用api的方法

    7. **测试API调用**:单元测试和集成测试对于API调用的代码至关重要。JUnit和Mockito等库可以帮助编写测试用例,模拟API响应,确保代码的正确性。 总的来说,Java调用API涉及了HTTP通信、数据序列化、异常处理、...

    java扫描仪接口调用源码

    Java扫描仪接口调用源码涉及的技术点广泛,主要涵盖了Java与硬件设备交互、服务器部署以及Web服务的实现。在本文中,我们将深入探讨这些关键知识点。 首先,Java扫描仪接口调用涉及到Java的JNI(Java Native ...

    Xamarin android调用web api入门示例

    2. **Web API调用**: Web API是ASP.NET框架的一个子集,用于构建RESTful服务。在Xamarin应用中,通常使用HttpClient类来发起HTTP请求并获取响应。你需要了解如何配置HttpClient,设置URL,以及处理JSON或XML响应。...

    java扫描仪接口调用

    总的来说,"java扫描仪接口调用"涵盖了Java与TWAIN接口的交互、Windows环境下的应用开发、Web服务器集成、远程操作、图像处理以及数据库存储等多个方面,是一个综合性较强的技术主题。开发者需要对这些领域都有一定...

    科大讯飞,webAPI,语音合成,java

    基于科大讯飞的webAPI语音合成,使用java开发,大家别看花眼。 最近想用第三方api做点东西玩,一直在网上找不到,讯飞的web版的demo,就自己写了一个供大家参考,比较简陋,直接运行就好了

    金蝶K3星空云获取报表查询 WEB API(成本计算单报表查询) JAVA版.rar

    6. 本例基于JAVA SDK 7.6..1 即:k3cloud-webapi-sdk.7.6.1 7. 下载资源请慎重考虑。 8. 本人保证此贡献的代码为报表查询的核心代码,足以反映报表查询的基本思路,即接口请求和返回数据解析,解析为实体类。 9.核心...

    Android 请求 WebAPI的案例

    调用接口中的方法,创建`Call`对象,并通过`enqueue`异步执行请求,或者`execute`同步执行(需在非主线程中)。 ```java Call<YourResponseModel> call = service.fetchData(); call.enqueue(new Callback() {...

    Java调用金蝶.zip

    Java调用金蝶的webapi方法,内含金蝶webapi封装包

    java上传文件接口调用源码案例

    在Java中,文件上传通常涉及到调用远程服务器提供的API接口,这些接口接收文件作为输入并执行相应的处理。 1. **使用HTTP或HTTPS上传文件**: 文件上传通常通过POST请求进行,HTTP或HTTPS是互联网上常用的数据传输...

    实现webServices接口调用demo

    本教程将深入讲解如何使用XFire在Java环境中实现Web服务接口的调用,包括内部和外部访问。 一、Web服务简介 Web服务是通过SOAP(Simple Object Access Protocol)协议,使用HTTP作为传输层,XML作为数据交换格式的...

Global site tag (gtag.js) - Google Analytics