深入理解什么是RESTful API

前言:最近两年很火爆的网络框架Retrofit,使用它的时候,查看文档会告诉你,要求后台的服务器哥们必须符合REST规范给你设计接口,作为安卓开发工程师来说,我就很奇怪了,REST规范到底是啥?本着极客精神,我就查了资料,写了这么一篇文章,如果有不对的地方,欢迎提意见。 一、理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这种”互联网软件”采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。 网站开发,完全可以采用软件开发的模式。但是传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间的通信。互联网的兴起,使得这两个领域开始融合,现在我们必须考虑,如何开发在互联网环境中使用的软件。 RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。 但是,到底什么是RESTful架构,并不是一个容易说清楚的问题。下面,我就谈谈我理解的RESTful架构。 一、起源 REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。 Fielding是一个非常重要的人,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。所以,他的这篇论文一经发表,就引起了关注,并且立即对互联网开发产生了深远的影响。 他这样介绍论文的写作目的: 本文研究计算机科学两大前沿—-软件和网络—-的交叉点。长期以来,软件研究主要关注软件设计的分类、设计方法的演化,很少客观地评估不同的设计选择对系统行为的影响。而相反地,网络研究主要关注系统之间通信行为的细节、如何改进特定通信机制的表现,常常忽视了一个事实,那就是改变应用程序的互动风格比改变互动协议,对整体表现有更大的影响。我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。 二、名称 Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。我对这个词组的翻译是”表现层状态转化”。 如果一个架构符合REST原则,就称它为RESTful架构。…

Continue Reading →

Nginx配置文件详解中文版

#定义Nginx运行的用户和用户组,系统中必须有此用户,可以是nologin user www www; #nginx进程,一般设置为和cpu核数一样 worker_processes 8; #cpu亲和力配置,让不同的进程使用不同的cpu 默认情况下可能多个进程跑在一个CPU上或某一核上,导致Nginx进程使用硬件资源不均匀, 此次优化是尽可能地分配不同的Nginx进程给不同的CPU处理 两颗CPU参数配置 worker_processes 2; worker_cpu_affinity 0101 1010; 四颗CPU参数配置 worker_processes 4; worker_cpu_affinity…

Continue Reading →

几种流行WebService框架性能对比

1、摘要 开发webservice应用程序中离不开框架的支持,当open-open网站列举的就有很多种,这对于开发者如何选择带来一定的疑惑。性能Webservice的关键要素,不同的框架性能上存在较大差异,而当前在官方网站、网络资料中可以方便的找到各自框架的介绍,但是很少有针对不同框架性能测试数据。本文选择了比较流行几个框架: Apache Axis1、Apache Axis2、Codehaus XFire、Apache CXF、Apache Wink、Jboss  RESTEasy、sun JAX-WS(最简单、方便)、阿里巴巴  Dubbo(除外)等,采用java作为测试用例,通过本机和远程两种进行测试方式,对这几种框架进行了性能测试,并对测试结果分析和性能比较,最后并对性能优异的框架进行了推荐。 目前三种主流的web服务实现方法: REST(新型):表象化状态转变 (软件架构风格)RESTEasy、Wink、CXF、Axis2……. SOAP(比较成熟):简单对象访问协议  Xfire、Axis2、CXF、Axis1 XML-RPC(淘汰):远程过程调用协议(慢慢被soap 所取代) 2、框架介绍 2.1 Apache Axis1 Axis本质上就是一个SOAP引擎(Apache Axis is an implementation of the SOAP),提供创建服务器端、客户端和网关SOAP操作的基本框架。但Axis并不完全是一个SOAP引擎,它还包括: l  是一个独立的SOAP服务器。 l  是一个嵌入Servlet引擎(例如Tomcat)的服务器。 l  支持WSDL。 l  提供转化WSDL为Java类的工具。 l  提供例子程序。 l  提供TCP/IP数据包监视工具。 2.2 Apache…

Continue Reading →

浅析RPC与WebService

现在非常火的RPC技术以SpringCloud和Dubbo为主流,但是如果做接口调用,还是逃不了要用一些较传统的技术。前几天在做接口调用时恰巧用到了WebService的相关技术。 1. RPC相关基础 1.1 什么是RPC —-| RPC(Remote Procedure Call),远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。(来自百度百科) —-| RPC允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不需要显式编码这个远程调用的细节。 1.2 RPC的特点 从上面的概念中,能大概总结出RPC的基本特点如下: 通过网络传输的 跨终端、跨平台的 基于请求-响应的 只调用过程,不需关注细节 1.3 RPC的基本原理…

Continue Reading →

HTML xmlns 属性

xmlns 属性 xmlns 属性可以在文档中定义一个或多个可供选择的命名空间。该属性可以放置在文档内任何元素的开始标签中。该属性的值类似于 URL,它定义了一个命名空间,浏览器会将此命名空间用于该属性所在元素内的所有内容。 例如,如果需要使用符合 XML 规范的 XHTML 文档,则应该在文档中的<html> 标签中至少使用一个 xmlns 属性,以指定整个文档所使用的主要命名空间: <html xmlns=”http://www.w3.org/1999/xhtml”> 如果需要在一个 div 元素中显示一串数学公式,则可以为该 div 元素定义一个数学命名空间。比如这样:…

Continue Reading →

程序的运行机制——CPU、内存、指令的那些事

一、前言 说起计算机大家并不陌生,在计算机上又运行着各种程序,如QQ、微信等。这些程序有可以为我们做很多事情,能聊天、能玩游戏等等。那么这些看似复杂的程序在计算机中到底是怎么运行起来的呢?其实非常简单,我们不妨一起探讨一下。 作为程序员我们必须理解CPU是如何运行的,特别是要弄清楚负责保存指令和数据的寄存器的机制。了解了寄存器,也就自然而然的理解了程序的运行机制。 二、CPU 在程序运行流程中,CPU所负责的就是解析和运算最终转换成机器语言的程序内容。CPU从功能上来看由寄存器、控制器、运算器、时钟构成。 寄存器:用来暂存指令、数据等处理对象。 控制器:负责把内存上的指令、数据等读入寄存器、并根据指令的执行结果来控制计算机。 运算器:负责运算从内存读入寄存器的数据。 时钟:负责发出CPU开始计时的时钟信号 三、内存 内存指的就是计算机的主存储器,其主要负责存储指令和数据。CPU通过内存地址值来读取或写入指令和数据。注意:内存中的指令和数据会随着计算机的关机日自动清除。 在理解CPU和内存后,大家对程序的运行机制的理解是不是也加深了一些?程序启动后,根据时钟信号,控制器会从内存中读取指令和数据。通过对这些指令加以解析和运行,运算器就会对数据进行运算,控制器根据运算结果控制计算机。 四、决定程序流程的程序计数器 下面我们通过将123和456两个数相加,并将结果输出到显示器的实例,说一下程序计数器是如何工作的。 当用户发出启动程序的指示后,操作系统会把硬盘中保存的程序复制到内存中。如下图是程序启动时内存内容的模型。 操作系统把程序复制到内存后,会将程序计数器设定为0100(假设内存地址0100是程序运行的开始地址),然后程序便开始运行。CPU每执行一个指令,程序计数器的值就会自动加1。所以,程序计数器决定着程序的流程。 五、指令 从功能方面来看,机器语言指令可分为数据传送指令、算数指令、跳转指令、call/return指令。 数据传送指令:寄存器和内存、内存和内存、寄存器和外围设备之间的数据读写操作 运算指令:用累加寄存器执行算术运算、逻辑运算、比较运算和位移运算 跳转指令:实现条件分支、循环、强制跳转等…

Continue Reading →

Oracle 建立索引及SQL优化

一、概述 数据库索引有单列索引和复合索引之说,如果某表的某个字段有主键约束和唯一性约束,则Oracle 则会自动在相应的约束列上建议唯一索引。数据库索引主要进行提高访问速度。 二、建设原则 建设原则总结:大表Where列的Order by排序,考虑SQL性能优化的索引创建。 1、索引应该经常建在Where子句经常用到的列上。如果某个大表经常使用某个字段进行查询,并且检索行数小于总表行数的5%,则应该考虑。 2、对于两表连接的字段,应该建立索引。如果经常在某表的一个字段进行Order By则也经过进行索引。 3、不应该在小表上建设索引。 三、优缺点 索引主要进行提高数据的查询速度。 当进行DML(Data Manipulation Language:即INSERT、DELETE、UPDATE)时,会更新索引。因此索引越多,则DML越慢,其需要维护索引。 因此在创建索引及DML需要权衡。创建索引: 单一索引:Create Index <Index-Name> On…

Continue Reading →

Centos7搭建FTP服务器

vsftpd是linux下的一款小巧轻快,安全易用的FTP服务器软件,是一款在各个Linux发行版中最受推崇的FTP服务器软件。 一、安装vsftpd yum install vsftpd -y 二、启动vsftpd systemctl start vsftpd 1、加入开机启动 systemctl enable vsftpd 2、启动后可以看到系统监听21端口 netstat -nltp | grep 21…

Continue Reading →

Posted in: FTP

解决浏览器与服务器请求url长度限制

一、前言 Http中get与post本身是没有受到长度限制的,受到限制是浏览器与服务器对url长度限制。具体说明请阅读我的零一篇文章《关于 HTTP GET/POST 请求参数长度最大值的一个理解误区》。 二、概述 1、服务器限制 我目前使用的服务器一般是tomcat+nginx,它们都是通过控制http请求头的长度来进行限制 的,nginx的配置参数为large_client_header_buffers,tomcat的请求配置参数为 maxHttpHeaderSize,都是可以自己去进行设置。 2、浏览器限制 浏览器的限制:每种浏览器也会对url的长度有所限制, 下面是几种常见浏览器的url长度限制:(单位:字符) IE : 2803 Firefox:65536 Chrome:8182 Safari:80000 Opera:190000…

Continue Reading →

Nginx upstream的5种权重分配方式分享

1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如: upstream backend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; } 3、ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 例如: upstream backend…

Continue Reading →