在Android上,原生API有两个,HttpUrlConnection和HttpClient,它们对封装Socket进行封装,让HTTP请求变得简单。这应该也算框架吧?

想象下,如果没有HttpUrlConnection和HttpClient,一次性的API请求得有多麻烦。

现在,我们又多了一种OkHttp,Square出品。当然底层还是封装socket。为什么,为什么还要再出一个OkHttp,吃饱了撑的?肯定不是,那究竟有什么好的?自己动手查一下吧。

我们假设一下,应该是HttpUrlConnection和HttpClient自身有bug和缺陷,所以才会再根据如今的网络情况设计OkHttp吧。

如果你看过Volley的源代码,就知道当SDK>9时,默认使用HttpUrlConnection,<9的就用HttpClient。 

既然>9采用HttpUrlConnection了,那说明,再以后的版本中由Android修复了,那HttpClient呢,Apache更新维护太慢,基本要被淘汰。

如果说你的项目还在用HttpClient,甚至还在为HttpClient的某些bug而苦恼,那么你该考虑是否该换了。毕竟现实不可能给你那么多时间去调研debug。

当然OkHttp也是有bug的,从github上的issues就能知道,如果你用OkHttp发现了bug,又不知道如何解决,不妨去那看看。

说了这么多,Stay想表达的有两层意思: 
1. 不妨使用新技术来解决老技术的缺陷,就好像如果现在还有人用TabActivity,TabHost,那给人感觉一定是做外包出身的。 
2. 尝试新技术的成本不高的,如果它开源,并且有release版本(1.0+),你都可以集成试试。新技术都是为了更好的开发而被设计出来的,就算它不是最优的解决方案,至少设计理念,解决思路是值得参考的。

今天下午花了点时间,粗略的过了一遍OkHttp,有意思的是,为了让大家无缝集成,也是蛮拼的,额外提供HttpUrlConnection和HttpClient的写法。你只需要再依赖okhttp-urlconnection.jar或者okhttp-apache.jar就可以了。

本来Stay是打算用OkHttp自己的请求API集成的自己的网络框架里,捣鼓了半天,怪麻烦的,API来来回回要找半天,索性就直接换成HttpUrlConnection的形式写了。 

see, 集成起来太方便了。简单的测试了下,get,post,上传,下载都没问题。其他就没再深入了。

代码已在Stay讲的[自己动手写个Http框架]中更新,想尝鲜的可以去看看。

OkHttp的示例都很简单,有很多配置(ssl, cookies, headers, timeout)没详细说明,那如果你想配置,该怎么做捏。可以看源码,也可以看一些网络请求框架如:Retrofit(Square的网络请求框架,默认集成OkHttp)源码中的API配置。


对于这类底层API创新,还是比较少的,几年内能出一个就不错了,毕竟对HTTP协议融会贯通而且能优化的大牛少之又少。对于一般的苦逼开发者来说,能做到及时跟进已属不易。

多尝试新技术,至少可以晚些结束自己的程序员生涯 :)


有心课堂,传递给你的不仅仅是技术。✈️ www.stay4it.com

[HTTP那些事]网络请求API的更多相关文章

  1. 第三篇、微信小程序-网络请求API

    wx.request(OBJECT)发起的是https请求.一个微信小程序,同时只能有5个网络请求连接. OBJECT参数说明: 效果图: net.js Page({ data:{ result:{} ...

  2. 09事件传递参数-封装网络请求api get和post合并整合在一起

    1==>通过点击事件进行传递参数 <view bindtap="goEdution" data-index="5">西南大学</view ...

  3. iOS - ASIHTTPRequest 网络请求

    前言 使用 iOS SDK 中的 HTTP 网络请求 API,相当的复杂,调用很繁琐,ASIHTTPRequest 就是一个对 CFNetwork API 进行了封装,并且使用起来非常简单的一套 AP ...

  4. 一步步搭建Retrofit+RxJava+MVP网络请求框架(一)

    首先,展示一下封装好之后的项目的层级结构. 1.先创建一个RetrofitApiService.java package com.xdw.retrofitrxmvpdemo.http; import ...

  5. 一步步搭建Retrofit+RxJava+MVP网络请求框架(二),个人认为这次封装比较强大了

    在前面已经初步封装了一个MVP的网络请求框架,那只是个雏形,还有很多功能不完善,现在进一步进行封装.添加了网络请求时的等待框,retrofit中添加了日志打印拦截器,添加了token拦截器,并且对Da ...

  6. React Native 网络请求封装:使用Promise封装fetch请求

    最近公司使用React作为前端框架,使用了异步请求访问,这里做下总结: React Native中虽然也内置了XMLHttpRequest 网络请求API(也就是俗称的ajax),但XMLHttpRe ...

  7. 微信小程序网络请求wx.request请求

    最近微信小程序开始开放测试了,小程序提供了很多api,极大的方便了开发者,其中网络请求api是wx.request(object),这是小程序与开发者的服务器实现数据交互的一个很重要的api. 百牛信 ...

  8. 微信小程序request请求实例,网络请求。

    最近微信小程序开始开放测试了,小程序提供了很多api,极大的方便了开发者,其中网络请求api是wx.request(object),这是小程序与开发者的服务器实现数据交互的一个很重要的api. 官方参 ...

  9. 百度语音识别REST API——通过使用Http网络请求方式获得语音识别功能

    百度语音识别通过REST API的方式给开发人员提供一个通用的HTTP接口,基于该接口,开发人员能够轻松的获取语音识别能力,本文档描写叙述了使用语音识别服务REST API的方法. 长处: 较之开发人 ...

随机推荐

  1. 在Debian上用Bind 配置DNS服务器

    1 什么是DNS 初学者可能不理解DNS到底是什么,干什么用.我是在1998年大学毕业时才听说这个词的.那时我在聊天室碰到潍坊信息港的一个网管,我恬不知耻地说我也是个网管,他说也维护DNS吗?我说,D ...

  2. xdebug安装

    sudo apt-get install php-pearsudo apt-get install php5-devsudo pecl install xdebug 下载安装编译完后,在php.ini ...

  3. JS判断客户端是手机还是PC的2个代码(转)

    转载自:http://www.jb51.net/article/48939.htm Javascript 判断客户端是否为 PC 还是手持设备,有时候项目中需要用到,很方便的检测,源生的哦,方法一共有 ...

  4. 对map创建出来的值顺序排序问题

    TreeMap 在用Ajax动态创建checkBox时,而把值放在了HashMap中,hashMap是无序的,因此你动态创建出来的顺序是乱的,比如你想要的顺序是1.2.3.4但出来的结果可能是 3.2 ...

  5. 【xml】利用OpenCV解析

    看到一篇讲的很清楚的博客:http://blog.csdn.net/jarvischu/article/details/8481510

  6. codeforces gym 100286 I iSharp (字符串模拟)

    题目链接 给定一个字符串.输入是int& a*[]&, b, c*; 输出是 int&&[]* a;int& b;int&* c; 输入格式里逗号后面一 ...

  7. ios waxpatch lua语法

    Wax Lua 使用方法 说一下 Wax 的特点,它支持你在脚本里使用任何 OC 的类,同样也支持你创建一个类. 使用一个类时你会这样使用: 1 2 NSString -- Returns the N ...

  8. 25个增强iOS应用程序性能的提示和技巧(中级篇)(2)

    25个增强iOS应用程序性能的提示和技巧(中级篇)(2) 2013-04-16 14:42 破船之家 beyondvincent 字号:T | T 本文收集了25个关于可以提升程序性能的提示和技巧,分 ...

  9. javascript void运算符

    参考链接:http://www.cnblogs.com/ziyunfei/archive/2012/09/23/2698607.html语法: void expr 作用:计算表达式expr,并返回un ...

  10. maven配置httpclient3.X jar包

    <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging& ...