1
0
Эх сурвалжийг харах

Add the web server & web services

Fengda HUANG 10 жил өмнө
parent
commit
627963d375
7 өөрчлөгдсөн 456 нэмэгдсэн , 289 устгасан
  1. 209 145
      build/pdf.html
  2. BIN
      images/rpi.jpg
  3. 203 144
      index.html
  4. 5 0
      src/1.8.rpi.md
  5. 16 0
      src/1.9.server.md
  6. 16 0
      src/2.0.webservices.md
  7. 7 0
      src/2.1.restful.md

+ 209 - 145
build/pdf.html

@@ -140,96 +140,103 @@ code > span.er { color: #ff0000; font-weight: bold; }
 <li><a href="#raspberry-pi-初始化"><span class="toc-section-number">9.2</span> Raspberry Pi 初始化</a></li>
 <li><a href="#raspberry-pi-gpio"><span class="toc-section-number">9.3</span> Raspberry Pi GPIO</a></li>
 </ul></li>
-<li><a href="#http与restful"><span class="toc-section-number">10</span> HTTP与RESTful</a><ul>
-<li><a href="#你所没有深入的http"><span class="toc-section-number">10.1</span> 你所没有深入的HTTP</a><ul>
-<li><a href="#打开网页时发生了什么"><span class="toc-section-number">10.1.1</span> 打开网页时发生了什么</a></li>
-<li><a href="#url组成"><span class="toc-section-number">10.1.2</span> URL组成</a></li>
+<li><a href="#server"><span class="toc-section-number">10</span> Server</a><ul>
+<li><a href="#服务器"><span class="toc-section-number">10.1</span> 服务器</a></li>
+<li><a href="#web服务器"><span class="toc-section-number">10.2</span> Web服务器</a></li>
 </ul></li>
-<li><a href="#一次http-get请求"><span class="toc-section-number">10.2</span> 一次HTTP GET请求</a><ul>
-<li><a href="#http响应"><span class="toc-section-number">10.2.1</span> HTTP响应</a></li>
+<li><a href="#web服务"><span class="toc-section-number">11</span> Web服务</a><ul>
+<li><a href="#soap-vs-restful"><span class="toc-section-number">11.1</span> SOAP VS RESTful</a></li>
 </ul></li>
-<li><a href="#rest"><span class="toc-section-number">10.3</span> REST</a><ul>
-<li><a href="#资源"><span class="toc-section-number">10.3.1</span> 资源</a></li>
+<li><a href="#http与restful"><span class="toc-section-number">12</span> HTTP与RESTful</a><ul>
+<li><a href="#你所没有深入的http"><span class="toc-section-number">12.1</span> 你所没有深入的HTTP</a><ul>
+<li><a href="#打开网页时发生了什么"><span class="toc-section-number">12.1.1</span> 打开网页时发生了什么</a></li>
+<li><a href="#url组成"><span class="toc-section-number">12.1.2</span> URL组成</a></li>
 </ul></li>
+<li><a href="#一次http-get请求"><span class="toc-section-number">12.2</span> 一次HTTP GET请求</a><ul>
+<li><a href="#http响应"><span class="toc-section-number">12.2.1</span> HTTP响应</a></li>
 </ul></li>
-<li><a href="#设计restful-api"><span class="toc-section-number">11</span> 设计RESTful API</a><ul>
-<li><a href="#rest关键目标"><span class="toc-section-number">11.1</span> REST关键目标</a></li>
-<li><a href="#判断是否是-restful的约束条件"><span class="toc-section-number">11.2</span> 判断是否是 RESTful的约束条件</a></li>
-<li><a href="#设计restful资源"><span class="toc-section-number">11.3</span> 设计RESTful资源</a></li>
-<li><a href="#设计restful-uri"><span class="toc-section-number">11.4</span> 设计RESTful URI</a></li>
-<li><a href="#json"><span class="toc-section-number">11.5</span> JSON</a></li>
+<li><a href="#rest"><span class="toc-section-number">12.3</span> REST</a><ul>
+<li><a href="#资源"><span class="toc-section-number">12.3.1</span> 资源</a></li>
 </ul></li>
-<li><a href="#rest服务准备"><span class="toc-section-number">12</span> REST服务准备</a><ul>
-<li><a href="#laravel"><span class="toc-section-number">12.1</span> Laravel</a><ul>
-<li><a href="#为什么是-laravel"><span class="toc-section-number">12.1.1</span> 为什么是 Laravel</a></li>
 </ul></li>
-<li><a href="#安装-laravel"><span class="toc-section-number">12.2</span> 安装 Laravel</a><ul>
-<li><a href="#gnulinux安装composer"><span class="toc-section-number">12.2.1</span> GNU/Linux安装Composer</a></li>
+<li><a href="#设计restful-api"><span class="toc-section-number">13</span> 设计RESTful API</a><ul>
+<li><a href="#rest关键目标"><span class="toc-section-number">13.1</span> REST关键目标</a></li>
+<li><a href="#判断是否是-restful的约束条件"><span class="toc-section-number">13.2</span> 判断是否是 RESTful的约束条件</a></li>
+<li><a href="#设计restful资源"><span class="toc-section-number">13.3</span> 设计RESTful资源</a></li>
+<li><a href="#设计restful-uri"><span class="toc-section-number">13.4</span> 设计RESTful URI</a></li>
+<li><a href="#json"><span class="toc-section-number">13.5</span> JSON</a></li>
 </ul></li>
-<li><a href="#mysql"><span class="toc-section-number">12.3</span> MySQL</a><ul>
-<li><a href="#安装mysql-1"><span class="toc-section-number">12.3.1</span> 安装MySQL</a></li>
-<li><a href="#配置mysql"><span class="toc-section-number">12.3.2</span> 配置MySQL</a></li>
+<li><a href="#rest服务准备"><span class="toc-section-number">14</span> REST服务准备</a><ul>
+<li><a href="#laravel"><span class="toc-section-number">14.1</span> Laravel</a><ul>
+<li><a href="#为什么是-laravel"><span class="toc-section-number">14.1.1</span> 为什么是 Laravel</a></li>
 </ul></li>
+<li><a href="#安装-laravel"><span class="toc-section-number">14.2</span> 安装 Laravel</a><ul>
+<li><a href="#gnulinux安装composer"><span class="toc-section-number">14.2.1</span> GNU/Linux安装Composer</a></li>
 </ul></li>
-<li><a href="#创建rest服务"><span class="toc-section-number">13</span> 创建REST服务</a><ul>
-<li><a href="#数据库迁移"><span class="toc-section-number">13.1</span> 数据库迁移</a><ul>
-<li><a href="#创建表"><span class="toc-section-number">13.1.1</span> 创建表</a></li>
-<li><a href="#数据库迁移-1"><span class="toc-section-number">13.1.2</span> 数据库迁移</a></li>
+<li><a href="#mysql"><span class="toc-section-number">14.3</span> MySQL</a><ul>
+<li><a href="#安装mysql-1"><span class="toc-section-number">14.3.1</span> 安装MySQL</a></li>
+<li><a href="#配置mysql"><span class="toc-section-number">14.3.2</span> 配置MySQL</a></li>
 </ul></li>
-<li><a href="#创建restful"><span class="toc-section-number">13.2</span> 创建RESTful</a></li>
-<li><a href="#laravel-resources"><span class="toc-section-number">13.3</span> Laravel Resources</a><ul>
-<li><a href="#修改create"><span class="toc-section-number">13.3.1</span> 修改Create()</a></li>
-<li><a href="#创建表单"><span class="toc-section-number">13.3.2</span> 创建表单</a></li>
-<li><a href="#编辑模板"><span class="toc-section-number">13.3.3</span> 编辑模板</a></li>
 </ul></li>
+<li><a href="#创建rest服务"><span class="toc-section-number">15</span> 创建REST服务</a><ul>
+<li><a href="#数据库迁移"><span class="toc-section-number">15.1</span> 数据库迁移</a><ul>
+<li><a href="#创建表"><span class="toc-section-number">15.1.1</span> 创建表</a></li>
+<li><a href="#数据库迁移-1"><span class="toc-section-number">15.1.2</span> 数据库迁移</a></li>
 </ul></li>
-<li><a href="#restful-evertywhere"><span class="toc-section-number">14</span> RESTful Evertywhere</a><ul>
-<li><a href="#javascript与ajax"><span class="toc-section-number">14.1</span> Javascript与ajax</a><ul>
-<li><a href="#jquery"><span class="toc-section-number">14.1.1</span> jQuery</a></li>
+<li><a href="#创建restful"><span class="toc-section-number">15.2</span> 创建RESTful</a></li>
+<li><a href="#laravel-resources"><span class="toc-section-number">15.3</span> Laravel Resources</a><ul>
+<li><a href="#修改create"><span class="toc-section-number">15.3.1</span> 修改Create()</a></li>
+<li><a href="#创建表单"><span class="toc-section-number">15.3.2</span> 创建表单</a></li>
+<li><a href="#编辑模板"><span class="toc-section-number">15.3.3</span> 编辑模板</a></li>
 </ul></li>
-<li><a href="#java与json"><span class="toc-section-number">14.2</span> Java与json</a><ul>
-<li><a href="#android"><span class="toc-section-number">14.2.1</span> Android</a></li>
 </ul></li>
-<li><a href="#python与json"><span class="toc-section-number">14.3</span> Python与json</a><ul>
-<li><a href="#requests"><span class="toc-section-number">14.3.1</span> requests</a></li>
+<li><a href="#restful-evertywhere"><span class="toc-section-number">16</span> RESTful Evertywhere</a><ul>
+<li><a href="#javascript与ajax"><span class="toc-section-number">16.1</span> Javascript与ajax</a><ul>
+<li><a href="#jquery"><span class="toc-section-number">16.1.1</span> jQuery</a></li>
 </ul></li>
+<li><a href="#java与json"><span class="toc-section-number">16.2</span> Java与json</a><ul>
+<li><a href="#android"><span class="toc-section-number">16.2.1</span> Android</a></li>
 </ul></li>
-<li><a href="#前端显示"><span class="toc-section-number">15</span> 前端显示</a><ul>
-<li><a href="#库与车轮子"><span class="toc-section-number">15.1</span> 库与车轮子</a></li>
-<li><a href="#库"><span class="toc-section-number">15.2</span> 库</a><ul>
-<li><a href="#jquery-mobile"><span class="toc-section-number">15.2.1</span> jQuery Mobile</a></li>
-<li><a href="#bootstrap"><span class="toc-section-number">15.2.2</span> Bootstrap</a></li>
+<li><a href="#python与json"><span class="toc-section-number">16.3</span> Python与json</a><ul>
+<li><a href="#requests"><span class="toc-section-number">16.3.1</span> requests</a></li>
 </ul></li>
-<li><a href="#网站前台显示"><span class="toc-section-number">15.3</span> 网站前台显示</a><ul>
-<li><a href="#highcharts"><span class="toc-section-number">15.3.1</span> Highcharts</a></li>
 </ul></li>
+<li><a href="#前端显示"><span class="toc-section-number">17</span> 前端显示</a><ul>
+<li><a href="#库与车轮子"><span class="toc-section-number">17.1</span> 库与车轮子</a></li>
+<li><a href="#库"><span class="toc-section-number">17.2</span> 库</a><ul>
+<li><a href="#jquery-mobile"><span class="toc-section-number">17.2.1</span> jQuery Mobile</a></li>
+<li><a href="#bootstrap"><span class="toc-section-number">17.2.2</span> Bootstrap</a></li>
 </ul></li>
-<li><a href="#构建基于coap协议的物联网系统"><span class="toc-section-number">16</span> 构建基于CoAP协议的物联网系统</a><ul>
-<li><a href="#coap-嵌入式系统的rest"><span class="toc-section-number">16.1</span> CoAP: 嵌入式系统的REST</a></li>
-<li><a href="#coap-命令行工具"><span class="toc-section-number">16.2</span> CoAP 命令行工具</a><ul>
-<li><a href="#node-coap-cli"><span class="toc-section-number">16.2.1</span> Node CoAP CLI</a></li>
-<li><a href="#libcoap"><span class="toc-section-number">16.2.2</span> libcoap</a></li>
-<li><a href="#firefox-copper"><span class="toc-section-number">16.2.3</span> Firefox Copper</a></li>
+<li><a href="#网站前台显示"><span class="toc-section-number">17.3</span> 网站前台显示</a><ul>
+<li><a href="#highcharts"><span class="toc-section-number">17.3.1</span> Highcharts</a></li>
 </ul></li>
-<li><a href="#coap-helloworld"><span class="toc-section-number">16.3</span> CoAP Hello,World</a></li>
-<li><a href="#coap-数据库查询"><span class="toc-section-number">16.4</span> CoAP 数据库查询</a><ul>
-<li><a href="#node-module"><span class="toc-section-number">16.4.1</span> Node Module</a></li>
-<li><a href="#node-sqlite3"><span class="toc-section-number">16.4.2</span> Node-Sqlite3</a></li>
-<li><a href="#查询数据"><span class="toc-section-number">16.4.3</span> 查询数据</a></li>
 </ul></li>
-<li><a href="#coap-block"><span class="toc-section-number">16.5</span> CoAP Block</a><ul>
-<li><a href="#coap-post"><span class="toc-section-number">16.5.1</span> CoAP POST</a></li>
-<li><a href="#coap-content-types"><span class="toc-section-number">16.5.2</span> CoAP Content Types</a></li>
+<li><a href="#构建基于coap协议的物联网系统"><span class="toc-section-number">18</span> 构建基于CoAP协议的物联网系统</a><ul>
+<li><a href="#coap-嵌入式系统的rest"><span class="toc-section-number">18.1</span> CoAP: 嵌入式系统的REST</a></li>
+<li><a href="#coap-命令行工具"><span class="toc-section-number">18.2</span> CoAP 命令行工具</a><ul>
+<li><a href="#node-coap-cli"><span class="toc-section-number">18.2.1</span> Node CoAP CLI</a></li>
+<li><a href="#libcoap"><span class="toc-section-number">18.2.2</span> libcoap</a></li>
+<li><a href="#firefox-copper"><span class="toc-section-number">18.2.3</span> Firefox Copper</a></li>
 </ul></li>
-<li><a href="#coap-json"><span class="toc-section-number">16.6</span> CoAP JSON</a></li>
-<li><a href="#使用iot-coap构建物联网"><span class="toc-section-number">16.7</span> 使用IoT-CoAP构建物联网</a></li>
+<li><a href="#coap-helloworld"><span class="toc-section-number">18.3</span> CoAP Hello,World</a></li>
+<li><a href="#coap-数据库查询"><span class="toc-section-number">18.4</span> CoAP 数据库查询</a><ul>
+<li><a href="#node-module"><span class="toc-section-number">18.4.1</span> Node Module</a></li>
+<li><a href="#node-sqlite3"><span class="toc-section-number">18.4.2</span> Node-Sqlite3</a></li>
+<li><a href="#查询数据"><span class="toc-section-number">18.4.3</span> 查询数据</a></li>
 </ul></li>
-<li><a href="#mqtt"><span class="toc-section-number">17</span> MQTT</a><ul>
-<li><a href="#nodejs-mqtt"><span class="toc-section-number">17.1</span> Nodejs MQTT</a></li>
+<li><a href="#coap-block"><span class="toc-section-number">18.5</span> CoAP Block</a><ul>
+<li><a href="#coap-post"><span class="toc-section-number">18.5.1</span> CoAP POST</a></li>
+<li><a href="#coap-content-types"><span class="toc-section-number">18.5.2</span> CoAP Content Types</a></li>
 </ul></li>
-<li><a href="#尾声"><span class="toc-section-number">18</span> 尾声</a><ul>
-<li><a href="#路"><span class="toc-section-number">18.1</span> 路</a></li>
-<li><a href="#其他-2"><span class="toc-section-number">18.2</span> 其他</a></li>
+<li><a href="#coap-json"><span class="toc-section-number">18.6</span> CoAP JSON</a></li>
+<li><a href="#使用iot-coap构建物联网"><span class="toc-section-number">18.7</span> 使用IoT-CoAP构建物联网</a></li>
+</ul></li>
+<li><a href="#mqtt"><span class="toc-section-number">19</span> MQTT</a><ul>
+<li><a href="#nodejs-mqtt"><span class="toc-section-number">19.1</span> Nodejs MQTT</a></li>
+</ul></li>
+<li><a href="#尾声"><span class="toc-section-number">20</span> 尾声</a><ul>
+<li><a href="#路"><span class="toc-section-number">20.1</span> 路</a></li>
+<li><a href="#其他-2"><span class="toc-section-number">20.2</span> 其他</a></li>
 </ul></li>
 </ul>
 </div>
@@ -1031,6 +1038,9 @@ a<span class="ch">[href^=</span><span class="st">&quot;#&quot;</span><span class
 <p>写博客似乎是一个不错的好习惯,作为一个不是很优秀的写手。对于来说,有时候发现原来能教会别人对于自己的能力来说算是一种肯定。有些时候教会别人才算是自己学会的表现,总会在项目上的时候需要自己去复述工作的一个过程,我们需要整理好我们的思路才能带给别人更多的收获。我们的笔记上总会留下自己的学习的一些过程,有些时候我们想要的只是一点点的鼓励,有时是诸如评论一类,有时可能是诸如访问量。更多的可能是我们可以重新整理自己的知识,好好复习一下,以便于好好记住,写出来是一个好的过程。</p>
 <p>无处不在的三剑客就这样到了这里,写得似乎很多也很少,但是还是没有做出来一个东西,于是我们朝着这样一个方向前进。</p>
 <h1 id="gnulinux"><span class="header-section-number">6</span> GNU/Linux</h1>
+<div class="figure">
+<img src="./images/gnu_linux.png" alt="GNU/Linux" /><p class="caption">GNU/Linux</p>
+</div>
 <h2 id="什么是linux"><span class="header-section-number">6.1</span> 什么是Linux</h2>
 <p>Linux是一种自由和开放源码的类UNIX操作系统内核。目前存在着许多不同的Linux发行版,可安装在各种各样的电脑硬件设备,从手机、平板电脑、路由器和影音游戏控制台,到桌上型电脑,大型电脑和超级电脑。 Linux是一个领先的操作系统内核,世界上运算最快的10台超级电脑运行的都是基于Linux内核的操作系统。</p>
 <p>Linux操作系统也是自由软件和开放源代码发展中最著名的例子。只要遵循GNU通用公共许可证,任何人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。<strong>严格来讲,Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统(也被称为GNU/Linux)。</strong>通常情况下,Linux被打包成供桌上型电脑和服务器使用的Linux发行版本。一些流行的主流Linux发行版本,包括Debian(及其衍生版本Ubuntu),Fedora和openSUSE等。Linux得名于电脑业余爱好者Linus Torvalds。</p>
@@ -1050,6 +1060,9 @@ a<span class="ch">[href^=</span><span class="st">&quot;#&quot;</span><span class
 </ul>
 <p>而让我们来看一下两者之间的不同之处,这是一张linux的架构图我们可以发现内核只是位于底层。</p>
 <h3 id="linux架构图"><span class="header-section-number">6.2.1</span> Linux架构图</h3>
+<div class="figure">
+<img src="./images/linux_kernel.jpg" alt="Linux Kernel" /><p class="caption">Linux Kernel</p>
+</div>
 <h4 id="用户模式"><span class="header-section-number">6.2.1.1</span> 用户模式</h4>
 <p>应用程序(sh、<a href="http://zh.wikipedia.org/wiki/Vi" title="Vi">vi</a>、<a href="http://zh.wikipedia.org/wiki/OpenOffice.org" title="OpenOffice.org">OpenOffice.org</a>等)</p>
 <p>复杂<a href="http://zh.wikipedia.org/wiki/%E5%BA%93" title="库">库</a>(<a href="http://zh.wikipedia.org/wiki/KDE" title="KDE">KDE</a>、glib等) 简单库(opendbm、sin等)</p>
@@ -1063,11 +1076,14 @@ a<span class="ch">[href^=</span><span class="st">&quot;#&quot;</span><span class
 <p>我们可以发现,由linux内核+shell可以构成一个操作系统,而linux本身只是个内核,也就是图中的内核模式,负责控制系统的这些部分。也就是我们可以发现,Linux内核构成了一个操作系统除用户界面以外的部分,而shell就是这最后的用户界面。</p>
 <p>而linux内核以外的部分就是由GNU计划构成的。</p>
 <h3 id="shell"><span class="header-section-number">6.2.2</span> Shell</h3>
+<div class="figure">
+<img src="./images/shell.png" alt="Shell" /><p class="caption">Shell</p>
+</div>
 <p>Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。</p>
 <p>实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果</p>
 <p>bash 是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHell — 这是关于Bourne shell(sh)的一个双关语(Bourne again / born again)。Bourne shell是一个早期的重要shell,由史蒂夫·伯恩在1978年前后编写,并同Version 7 Unix一起发布。bash则在1987年由布莱恩·福克斯创造。在1990年,Chet Ramey成为了主要的维护者。</p>
 <p>shell将会是我们在GNU/linux中经常用到的经常有到的工具之一,用来操作计算机用的。在迁移到linux之前我们可以试用cygwin来进行模拟:</p>
-<p><em>Cygwin是许多<a href="http://zh.wikipedia.org/wiki/%E8%87%AA%E7%94%B1%E8%BD%AF%E4%BB%B6" title="自由软件">自由软件</a>的集合,最初由<a href="http://zh.wikipedia.org/wiki/Cygnus_Solutions" title="Cygnus Solutions">Cygnus Solutions</a>开发,用于各种版本的<a href="http://zh.wikipedia.org/wiki/Microsoft_Windows" title="Microsoft Windows">Microsoft Windows</a>上,运行<a href="http://zh.wikipedia.org/wiki/Unix-like" title="Unix-like">UNIX类</a>系统。Cygwin</em></p>
+<p>Cygwin是许多自由软件的集合,最初由Cygnus Solutions开发,用于各种版本的Microsoft Windows上,运行<code>UNIX类</code>系统。</p>
 <h3 id="gcc"><span class="header-section-number">6.2.3</span> GCC</h3>
 <p>GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU开发的编程语言编译器。它是一套以GPL及LGPL许可证所发行的自由软件,也是GNU计划的关键部分,亦是自由的类Unix及苹果电脑Mac OS X 操作系统的标准编译器。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。</p>
 <p>GCC原名为GNU C语言编译器(GNU C Compiler),因为它原本只能处理C语言。GCC很快地扩展,变得可处理C++。之后也变得可处理Fortran、Pascal、Objective-C、Java、Ada,以及Go与其他语言。</p>
@@ -1365,6 +1381,9 @@ a<span class="ch">[href^=</span><span class="st">&quot;#&quot;</span><span class
     <span class="kw">return</span> <span class="dv">0</span>;
 }</code></pre>
 <h1 id="python"><span class="header-section-number">8</span> Python</h1>
+<div class="figure">
+<img src="./images/python.png" alt="python" /><p class="caption">python</p>
+</div>
 <p>作为一门计算机语言来说,Python会有下面的特点。</p>
 <ul>
 <li>语言学习起来容易</li>
@@ -1488,6 +1507,9 @@ a process or set of rules to be followed in calculations or other problem-solvin
 <li>pip 是目前 python 包管理的事实标准,2008年发布。它被用作 easy_install 的替代品,但是它仍有大量的功能建立在 setuptools 组件之上。</li>
 </ul>
 <h1 id="raspberry-pi"><span class="header-section-number">9</span> Raspberry Pi</h1>
+<div class="figure">
+<img src="./images/rpi.jpg" alt="Raspberry Pi" /><p class="caption">Raspberry Pi</p>
+</div>
 <h2 id="geek的盛宴"><span class="header-section-number">9.1</span> Geek的盛宴</h2>
 <p>Raspberry Pi是一款针对电脑业余爱好者、教师、小学生以及小型企业等用户的迷你电脑,预装Linux系统,体积仅信用卡大小,搭载ARM架构处理器,运算性能和智能手机相仿。在接口方面,Raspberry Pi提供了可供键鼠使用的USB接口,此外还有千兆以太网接口、SD卡扩展接口以及1个HDMI高清视频输出接口,可与显示器或者TV相连。</p>
 <p>Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。</p>
@@ -1519,8 +1541,24 @@ a process or set of rules to be followed in calculations or other problem-solvin
 <div class="figure">
 <img src="./images/gpio.png" alt="GPIO" /><p class="caption">GPIO</p>
 </div>
-<h1 id="http与restful"><span class="header-section-number">10</span> HTTP与RESTful</h1>
-<h2 id="你所没有深入的http"><span class="header-section-number">10.1</span> 你所没有深入的HTTP</h2>
+<h1 id="server"><span class="header-section-number">10</span> Server</h1>
+<h2 id="服务器"><span class="header-section-number">10.1</span> 服务器</h2>
+<p>服务器(Server)指: - 一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器(能使用户在其它计算机访问文件),数据库服务器和应用程序服务器。 - 运行以上软件的计算机,或称为网络主机(Host)。 - 一般来说,服务器通过网络对外提供服务。可以通过Intranet对内网提供服务,也可以通过Internet对外提供服务。</p>
+<h2 id="web服务器"><span class="header-section-number">10.2</span> Web服务器</h2>
+<p>WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。 WWW 是 Internet的多媒体信息查询工具,是 Internet 上近年才发展起来的服务,也是发展最快和目前用的最广泛的服务。正是因为有了WWW工具,才使得近年来 Internet 迅速发展,且用户数量飞速增长。</p>
+<h1 id="web服务"><span class="header-section-number">11</span> Web服务</h1>
+<p>Web服务是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。</p>
+<p>根据W3C的定义,Web服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作。网络服务通常是许多应用程序接口(API)所组成的,它们透过网络,例如国际互联网(Internet)的远程服务器端,执行客户所提交服务的请求。</p>
+<p>尽管W3C的定义涵盖诸多相异且无法介分的系统,不过通常我们指有关于主从式架构(Client-server)之间根据SOAP协议进行传递XML格式消息。无论定义还是实现,WEB服务过程中会由服务器提供一个机器可读的描述(通常基于WSDL)以辨识服务器所提供的WEB服务。另外,虽然WSDL不是SOAP服务端点的必要条件,但目前基于Java的主流WEB服务开发框架往往需要WSDL实现客户端的源代码生成。一些工业标准化组织,比如WS-I,就在WEB服务定义中强制包含SOAP和WSDL。</p>
+<p>WEB服务实际上是一组工具,并有多种不同的方法调用之。三种最普遍的手段是:</p>
+<ul>
+<li>远程过程调用(RPC)</li>
+<li>面向服务架构(SOA)</li>
+<li>表述性状态转移(REST)。</li>
+</ul>
+<h2 id="soap-vs-restful"><span class="header-section-number">11.1</span> SOAP VS RESTful</h2>
+<h1 id="http与restful"><span class="header-section-number">12</span> HTTP与RESTful</h1>
+<h2 id="你所没有深入的http"><span class="header-section-number">12.1</span> 你所没有深入的HTTP</h2>
 <p>Internet有两个核心协议: IP和TCP,这样讲述起来似乎会很漫长。</p>
 <p>基本概念</p>
 <blockquote>
@@ -1531,7 +1569,7 @@ a process or set of rules to be followed in calculations or other problem-solvin
 <li>传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的。</li>
 </ul>
 <p><code>注意</code>: HTTP协议只规定了客户端与服务端的通信规则,而没有规定其通讯协议,只是现在的大部分实现都是将TCP作为通讯协议。</p>
-<h3 id="打开网页时发生了什么"><span class="header-section-number">10.1.1</span> 打开网页时发生了什么</h3>
+<h3 id="打开网页时发生了什么"><span class="header-section-number">12.1.1</span> 打开网页时发生了什么</h3>
 <p>简单地来说,当我们在浏览器上输入URL的敲下回车的时候。</p>
 <ul>
 <li>浏览器需要查找域名<a href="#fn2" class="footnoteRef" id="fnref2"><sup>2</sup></a>的IP,从不同的缓存直至DNS服务器。</li>
@@ -1561,7 +1599,7 @@ a process or set of rules to be followed in calculations or other problem-solvin
 <li>从对应的服务器下载资源</li>
 </ol>
 <p>说说第一步,开始时我们输入的是URI(统一资源标识符,Uniform Resource Identifier),它还有另外一个名字叫统一资源定位器(URL<a href="#fn3" class="footnoteRef" id="fnref3"><sup>3</sup></a>,Uniform Resource Locator)。</p>
-<h3 id="url组成"><span class="header-section-number">10.1.2</span> URL组成</h3>
+<h3 id="url组成"><span class="header-section-number">12.1.2</span> URL组成</h3>
 <p>网址算是URL的一个俗称,让我们来看看一个URL的组成,以HTTP版IOT中的URL为例。</p>
 <p><code>http://b.phodal.com/athome/1</code></p>
 <p>开始之前,我们需要标出URL的80端口以及json文件的全称,那么上面的网址就会变成</p>
@@ -1580,7 +1618,7 @@ a process or set of rules to be followed in calculations or other problem-solvin
 <p>这里的<code>#</code>后面是锚部分,如果你打开这个URL就会发现会直接跳转到相应的锚部分,对就于下面这样的一个例子来说</p>
 <p><code>http://www.phodal.com/search/?q=iot&amp;type=blog</code></p>
 <p><code>?</code>后面的<code>q=iot&amp;type=blog</code>的部分是参数部分,通常用于查询或者、搜索。</p>
-<h2 id="一次http-get请求"><span class="header-section-number">10.2</span> 一次HTTP GET请求</h2>
+<h2 id="一次http-get请求"><span class="header-section-number">12.2</span> 一次HTTP GET请求</h2>
 <p>当我们打开最小物联网系统的一个页面时,如<a href="http://b.phodal.com/athome/1.json" class="uri">http://b.phodal.com/athome/1.json</a></p>
 <p>我们在浏览器上看到的结果是</p>
 <pre class="sourceCode javascript"><code class="sourceCode javascript">[
@@ -1601,14 +1639,14 @@ a process or set of rules to be followed in calculations or other problem-solvin
 
 [<span class="dt">{&quot;id&quot;:1,&quot;temperature&quot;:19,&quot;sensors1&quot;:31,&quot;sensors2&quot;:7.5,&quot;led1&quot;:0}</span>]</code></pre>
 <p>我们用curl命令向服务器发起了GET请求,服务器返回了上面的结果。</p>
-<h3 id="http响应"><span class="header-section-number">10.2.1</span> HTTP响应</h3>
+<h3 id="http响应"><span class="header-section-number">12.2.1</span> HTTP响应</h3>
 <p>一个HTTP响应由三部分组成</p>
 <ul>
 <li>状态行(状态码)</li>
 <li>消息报头(响应报头)</li>
 <li>响应正文(消息体)</li>
 </ul>
-<h4 id="http响应-状态码"><span class="header-section-number">10.2.1.1</span> HTTP响应 状态码</h4>
+<h4 id="http响应-状态码"><span class="header-section-number">12.2.1.1</span> HTTP响应 状态码</h4>
 <p>在上面的结果中,状态行是</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">HTTP/1.1</span> 200 OK</code></pre>
 <p>返回的状态码是200,OK是状态码的原因短语。</p>
@@ -1639,14 +1677,14 @@ a process or set of rules to be followed in calculations or other problem-solvin
 <li>422 unprocessable entity - 校验错误时用。</li>
 <li>429 too many request - 请求过多。</li>
 </ul>
-<h4 id="http响应-响应报头"><span class="header-section-number">10.2.1.2</span> HTTP响应 响应报头</h4>
+<h4 id="http响应-响应报头"><span class="header-section-number">12.2.1.2</span> HTTP响应 响应报头</h4>
 <p>在这次响应中,返回了两个报头,即</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">Content-Type</span>: application/json
 <span class="kw">Date</span>: Fri, 05 Sep 2014 15:05:49 GMT</code></pre>
 <p>Content-Type和Date,在这里的Context-Type是application/json,而通常情况下我们打开一个网站时,他的Content-Type应该是text/html。</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">Content-Type</span>: text/html<span class="kw">;</span></code></pre>
 <p>Content-Type是最重要的报头。</p>
-<h4 id="http响应-响应正文"><span class="header-section-number">10.2.1.3</span> HTTP响应 响应正文</h4>
+<h4 id="http响应-响应正文"><span class="header-section-number">12.2.1.3</span> HTTP响应 响应正文</h4>
 <p>正文才是我们真正想要的内容,上面的都是写给浏览器看的,一般的人不会去关注这些。</p>
 <pre class="sourceCode javascript"><code class="sourceCode javascript">HTTP/<span class="fl">1.1</span> <span class="dv">200</span> OK
 Server: <span class="ot">phodal</span>.<span class="fu">com</span>/<span class="fl">0.17.5</span>
@@ -1685,23 +1723,49 @@ Content-Type: application/json
 <li>《RESTful Web Services Cookbook》</li>
 <li>《RESTful Web APIs》</li>
 </ul>
-<h2 id="rest"><span class="header-section-number">10.3</span> REST</h2>
+<h2 id="rest"><span class="header-section-number">12.3</span> REST</h2>
 <blockquote>
 <p>REST从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表征。获得这些表征致使这些应用程序转变了其状态。随着不断获取资源的表征,客户端应用不断地在转变着其状态,所谓表征状态转移。</p>
 </blockquote>
 <p>因为我们需要的是一个Machine到Machine沟通的平台,需要设计一个API。而设计一个API来说,RESTful是很不错的一种选择,也是主流的选择。而设计一个RESTful服务,的首要步骤便是设计资源模型。</p>
-<h3 id="资源"><span class="header-section-number">10.3.1</span> 资源</h3>
+<h3 id="资源"><span class="header-section-number">12.3.1</span> 资源</h3>
 <p>互联网上的一切信息都可以看作是一种资源。</p>
-<h1 id="设计restful-api"><span class="header-section-number">11</span> 设计RESTful API</h1>
+<table>
+<thead>
+<tr class="header">
+<th align="left">HTTP Method</th>
+<th align="left">Operation Performed</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td align="left">GET</td>
+<td align="left">Get a resource (Read a resource)</td>
+</tr>
+<tr class="even">
+<td align="left">POST</td>
+<td align="left">Create a resource</td>
+</tr>
+<tr class="odd">
+<td align="left">PUT</td>
+<td align="left">Update a resource</td>
+</tr>
+<tr class="even">
+<td align="left">DELETE</td>
+<td align="left">Delete Resource</td>
+</tr>
+</tbody>
+</table>
+<h1 id="设计restful-api"><span class="header-section-number">13</span> 设计RESTful API</h1>
 <p>设计RESTful API是一个有意思的话题。下面是一些常用的RESTful设计原则:</p>
-<h2 id="rest关键目标"><span class="header-section-number">11.1</span> REST关键目标</h2>
+<h2 id="rest关键目标"><span class="header-section-number">13.1</span> REST关键目标</h2>
 <ul>
 <li>组件间交互的可伸缩性</li>
 <li>接口的通用性</li>
 <li>组件的独立部署</li>
 <li>通过中间组件来减少延迟、实施安全策略和封装已有系统</li>
 </ul>
-<h2 id="判断是否是-restful的约束条件"><span class="header-section-number">11.2</span> 判断是否是 RESTful的约束条件</h2>
+<h2 id="判断是否是-restful的约束条件"><span class="header-section-number">13.2</span> 判断是否是 RESTful的约束条件</h2>
 <ul>
 <li>客户端-服务器分离</li>
 <li>无状态</li>
@@ -1710,14 +1774,14 @@ Content-Type: application/json
 <li>统一接口</li>
 <li>随需代码(可选)</li>
 </ul>
-<h2 id="设计restful资源"><span class="header-section-number">11.3</span> 设计RESTful资源</h2>
-<h2 id="设计restful-uri"><span class="header-section-number">11.4</span> 设计RESTful URI</h2>
-<h2 id="json"><span class="header-section-number">11.5</span> JSON</h2>
+<h2 id="设计restful资源"><span class="header-section-number">13.3</span> 设计RESTful资源</h2>
+<h2 id="设计restful-uri"><span class="header-section-number">13.4</span> 设计RESTful URI</h2>
+<h2 id="json"><span class="header-section-number">13.5</span> JSON</h2>
 <div class="figure">
 <img src="./images/xml-vs-json.png" alt="xml-vs-json" /><p class="caption">xml-vs-json</p>
 </div>
-<h1 id="rest服务准备"><span class="header-section-number">12</span> REST服务准备</h1>
-<h2 id="laravel"><span class="header-section-number">12.1</span> Laravel</h2>
+<h1 id="rest服务准备"><span class="header-section-number">14</span> REST服务准备</h1>
+<h2 id="laravel"><span class="header-section-number">14.1</span> Laravel</h2>
 <blockquote>
 <p>Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。</p>
 </blockquote>
@@ -1731,28 +1795,28 @@ Content-Type: application/json
 <li>强大的社区支持: 无论你是一个PHP新手还是经验丰富的架构师,都能在社区中找到需要的知识。你可以在IRC中讨论Idea,或者在论坛中发布问题。</li>
 <li>测试、重构: Laravel 从开始就将测试作为重点功能。我们提供了灵活的IoC容器,集成了PHPUnit 测试工具。不用担心,这些都很容易上手。</li>
 </ul>
-<h3 id="为什么是-laravel"><span class="header-section-number">12.1.1</span> 为什么是 Laravel</h3>
+<h3 id="为什么是-laravel"><span class="header-section-number">14.1.1</span> 为什么是 Laravel</h3>
 <ul>
 <li>因为个人喜爱,你也可以用 Ruby On Rails来搭建这样一个功能,或者是Java。</li>
 <li>PHP在我的服务器上运行得挺不错的,而且我又不需要重新去写配置那些配置。</li>
 <li>Laravel 可以简单的开发我们所需要的功能,换句话说他是 PHP 世界的 Ruby On Rails。</li>
 </ul>
 <p>这里不会再重述之前的问题,这里只是将需要的步骤一个个写下来,然后丢到这里好好说一下。至于RESTful是什么,前面已经介绍了,就不再重复了。那么下面,我们就用Laravel来搭建一个平台给物联网用的。</p>
-<h2 id="安装-laravel"><span class="header-section-number">12.2</span> 安装 Laravel</h2>
-<h3 id="gnulinux安装composer"><span class="header-section-number">12.2.1</span> GNU/Linux安装Composer</h3>
+<h2 id="安装-laravel"><span class="header-section-number">14.2</span> 安装 Laravel</h2>
+<h3 id="gnulinux安装composer"><span class="header-section-number">14.2.1</span> GNU/Linux安装Composer</h3>
 <p>GNU/Linux Ubuntu/OpenSUSE下可以执行</p>
 <pre><code>$ curl -sS https://getcomposer.org/installer | php</code></pre>
-<h4 id="windows安装composer"><span class="header-section-number">12.2.1.1</span> Windows安装Composer</h4>
+<h4 id="windows安装composer"><span class="header-section-number">14.2.1.1</span> Windows安装Composer</h4>
 <p>请直接下载</p>
 <p><a href="https://getcomposer.org/Composer-Setup.exe">Composer-Setup</a></p>
-<h4 id="mac-os"><span class="header-section-number">12.2.1.2</span> Mac OS</h4>
+<h4 id="mac-os"><span class="header-section-number">14.2.1.2</span> Mac OS</h4>
 <p>1.安装Composer</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">brew</span> install homebrew/php/composer</code></pre>
 <p>2.安装Laravel</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">composer</span> global require <span class="st">&quot;laravel/installer=~1.1&quot;</span></code></pre>
 <p>3.创建Laravel工程</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">composer</span> create-project laravel/laravel your-project-name --prefer-dist </code></pre>
-<h4 id="mac-os-1"><span class="header-section-number">12.2.1.3</span> Mac OS</h4>
+<h4 id="mac-os-1"><span class="header-section-number">14.2.1.3</span> Mac OS</h4>
 <p>1.下载laravel.phar</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">wget</span> http://laravel.com/laravel.phar</code></pre>
 <p>2.重命名</p>
@@ -1761,8 +1825,8 @@ Content-Type: application/json
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">sudo</span> mv laravel /usr/local/bin</code></pre>
 <p>4.创建项目</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">laravel</span> new blog</code></pre>
-<h2 id="mysql"><span class="header-section-number">12.3</span> MySQL</h2>
-<h3 id="安装mysql-1"><span class="header-section-number">12.3.1</span> 安装MySQL</h3>
+<h2 id="mysql"><span class="header-section-number">14.3</span> MySQL</h2>
+<h3 id="安装mysql-1"><span class="header-section-number">14.3.1</span> 安装MySQL</h3>
 <p><code>出于某些原因,我建议用MariaDB替换MySQL,如果你&quot;真正&quot;需要mysql,将mariadb替换为mysql</code></p>
 <p>ps: 在下文中我会继续用MySQL,而不是MariaDB,MairaDB是MySQL的一个分支,真正的开源分支。</p>
 <p>Ubuntu/Debian/Mint</p>
@@ -1773,7 +1837,7 @@ Content-Type: application/json
 <pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">sudo</span> zypper install mariadb-server</code></pre>
 <p>Mac OS</p>
 <pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">brew</span> install mariadb</code></pre>
-<h3 id="配置mysql"><span class="header-section-number">12.3.2</span> 配置MySQL</h3>
+<h3 id="配置mysql"><span class="header-section-number">14.3.2</span> 配置MySQL</h3>
 <p>修改database.php</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">app/config/database.php</span></code></pre>
 <p>要修改的就是这个</p>
@@ -1799,10 +1863,10 @@ Content-Type: application/json
 <span class="st">&quot;sensors2&quot;</span>: <span class="dv">12</span>,
 <span class="st">&quot;led1&quot;</span>: <span class="dv">0</span>
 }</code></pre>
-<h1 id="创建rest服务"><span class="header-section-number">13</span> 创建REST服务</h1>
-<h2 id="数据库迁移"><span class="header-section-number">13.1</span> 数据库迁移</h2>
+<h1 id="创建rest服务"><span class="header-section-number">15</span> 创建REST服务</h1>
+<h2 id="数据库迁移"><span class="header-section-number">15.1</span> 数据库迁移</h2>
 <p>这个名字是源自于Ruby On Rails在那时候的印象,不直接使用MySQL的目的在于让我们可以专注于过程。</p>
-<h3 id="创建表"><span class="header-section-number">13.1.1</span> 创建表</h3>
+<h3 id="创建表"><span class="header-section-number">15.1.1</span> 创建表</h3>
 <p>表的概念,类似于在Excel中的表,如果你真实不懂数据库。 让我们创建一个athomes的表,为什么是athomes,因为以前在写android程序的时候就叫的是athome,忽略掉这些次要的因素吧。</p>
 <pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">php</span> artisan migrate:make create_athomes_table</code></pre>
 <p>打开 app/database/migrations/<strong><em>create_athomes_table.php这里的</em></strong>是由日期和某些东西组成的,修改生成的代码为下面。</p>
@@ -1831,7 +1895,7 @@ Content-Type: application/json
 
 }</code></pre>
 <p>意思大致就是id是自加的,也就是我们在localhost/athome/{id},当我们创建一个新的数据的时候,会自动加上去,最后一个timestamps批的是时间,会包含创建时间和修改时间。 剩下的temperature,sensors1,sensors2是小数,以及只有真和假的led1。</p>
-<h3 id="数据库迁移-1"><span class="header-section-number">13.1.2</span> 数据库迁移</h3>
+<h3 id="数据库迁移-1"><span class="header-section-number">15.1.2</span> 数据库迁移</h3>
 <p>我们只是写了我们需要的数据的格式而并没有丢到数据库里,</p>
 <pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">php</span> artisan migrate</code></pre>
 <p>这个就是我们执行迁移的命令,如果你用phpmyadmin可以直接打开查看,没有的话,可以。</p>
@@ -1839,7 +1903,7 @@ Content-Type: application/json
 <pre class="sourceCode sql"><code class="sourceCode sql"><span class="kw">use</span> iot;
 <span class="kw">select</span> * <span class="kw">from</span> athomes;</code></pre>
 <p>就可以看到我们写的东西,那么接下来就是创建RESTful服务了</p>
-<h2 id="创建restful"><span class="header-section-number">13.2</span> 创建RESTful</h2>
+<h2 id="创建restful"><span class="header-section-number">15.2</span> 创建RESTful</h2>
 <p>用下面的代码实现我们称之为Athomes控制器的创建</p>
 <pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">php</span> artisan controller:make AthomesController  </code></pre>
 <p>就会在app/controllers下面生成下面的代码</p>
@@ -1874,7 +1938,7 @@ Content-Type: application/json
     }  
 
 }</code></pre>
-<h2 id="laravel-resources"><span class="header-section-number">13.3</span> Laravel Resources</h2>
+<h2 id="laravel-resources"><span class="header-section-number">15.3</span> Laravel Resources</h2>
 <p>上面的代码过于沉重,请让我用 Ctrl+C 来带来点知识吧。</p>
 <table>
 <thead>
@@ -2027,7 +2091,7 @@ Content-Type: application/json
 }</code></pre>
 <p>希望你能读懂,没有的话,继续。</p>
 <p>下面这部分来自于之前的博客,这里就不多加论述了。 这个也就是我们要的模板,</p>
-<h3 id="修改create"><span class="header-section-number">13.3.1</span> 修改Create()</h3>
+<h3 id="修改create"><span class="header-section-number">15.3.1</span> 修改Create()</h3>
 <pre class="sourceCode php"><code class="sourceCode php"><span class="kw">public</span> <span class="kw">function</span> create<span class="ot">()</span>
 {
     <span class="kw">$maxid</span>=Athomes::<span class="fu">max</span><span class="ot">(</span><span class="st">&#39;id&#39;</span><span class="ot">);</span>
@@ -2039,8 +2103,8 @@ Content-Type: application/json
     <span class="kw">return</span> View::make<span class="ot">(</span><span class="st">&#39;athome.create&#39;</span><span class="ot">);</span>
 }</code></pre>
 <p>这里只是对其中代码的进行一下说明。</p>
-<h3 id="创建表单"><span class="header-section-number">13.3.2</span> 创建表单</h3>
-<h4 id="创建表单之前"><span class="header-section-number">13.3.2.1</span> 创建表单之前</h4>
+<h3 id="创建表单"><span class="header-section-number">15.3.2</span> 创建表单</h3>
+<h4 id="创建表单之前"><span class="header-section-number">15.3.2.1</span> 创建表单之前</h4>
 <p>由于使用到了bootstrap以及bootstrap-select,记得添加css。</p>
 <pre class="sourceCode html"><code class="sourceCode html"><span class="kw">&lt;link</span><span class="ot"> rel=</span><span class="st">&quot;stylesheet&quot;</span><span class="ot"> type=</span><span class="st">&quot;text/css&quot;</span><span class="ot"> href=</span><span class="st">&quot;</span><span class="er">&lt;</span><span class="st">?= url(&#39;css/bootstrap.min.css&#39;) ?&gt;&quot;</span> <span class="kw">/&gt;</span>
 <span class="kw">&lt;link</span><span class="ot"> rel=</span><span class="st">&quot;stylesheet&quot;</span><span class="ot"> type=</span><span class="st">&quot;text/css&quot;</span><span class="ot"> href=</span><span class="st">&quot;</span><span class="er">&lt;</span><span class="st">?= url(&#39;css/bootstrap-select.min.css&#39;) ?&gt;&quot;</span> <span class="kw">/&gt;</span></code></pre>
@@ -2051,7 +2115,7 @@ Content-Type: application/json
 <span class="kw">&lt;script&gt;</span>
 <span class="fu">$</span>(<span class="st">&#39;.selectpicker&#39;</span>).<span class="fu">selectpicker</span>();
 &lt;<span class="ot">/script&gt;</span></code></pre>
-<h4 id="创建表单-1"><span class="header-section-number">13.3.2.2</span> 创建表单</h4>
+<h4 id="创建表单-1"><span class="header-section-number">15.3.2.2</span> 创建表单</h4>
 <p>这里用到的是之前提到的那个作者写下的,稍微修改了一下。</p>
 <pre class="sourceCode html"><code class="sourceCode html"><span class="kw">&lt;div</span><span class="ot"> class=</span><span class="st">&quot;row-fluid&quot;</span><span class="kw">&gt;</span>
   {{ HTML::ul($errors-&gt;all()) }}
@@ -2103,7 +2167,7 @@ Content-Type: application/json
         <span class="kw">return</span> Redirect::to<span class="ot">(</span><span class="st">&#39;athome&#39;</span><span class="ot">);</span>
     }
 }</code></pre>
-<h3 id="编辑模板"><span class="header-section-number">13.3.3</span> 编辑模板</h3>
+<h3 id="编辑模板"><span class="header-section-number">15.3.3</span> 编辑模板</h3>
 <p>完整的 blade 模板文件</p>
 <pre class="sourceCode html"><code class="sourceCode html"><span class="dt">&lt;!DOCTYPE </span>html lang=&quot;zh-cn&quot;<span class="dt">&gt;</span>
 <span class="kw">&lt;html&gt;</span>
@@ -2164,21 +2228,21 @@ Content-Type: application/json
 <img src="./images/edit.png" alt="Blade Edit" /><p class="caption">Blade Edit</p>
 </div>
 <p>最后效果见:<a href="http://b.phodal.com/" class="uri">http://b.phodal.com/</a></p>
-<h1 id="restful-evertywhere"><span class="header-section-number">14</span> RESTful Evertywhere</h1>
-<h2 id="javascript与ajax"><span class="header-section-number">14.1</span> Javascript与ajax</h2>
+<h1 id="restful-evertywhere"><span class="header-section-number">16</span> RESTful Evertywhere</h1>
+<h2 id="javascript与ajax"><span class="header-section-number">16.1</span> Javascript与ajax</h2>
 <blockquote>
 <p>AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。</p>
 </blockquote>
-<h3 id="jquery"><span class="header-section-number">14.1.1</span> jQuery</h3>
+<h3 id="jquery"><span class="header-section-number">16.1.1</span> jQuery</h3>
 <blockquote>
 <p>Jquery是继prototype之后又一个优秀的Javascript框架。它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+),jQuery2.0及后续版本将不再支持IE6/7/8浏览器。jQuery使用户能更方便地处理HTML(标准通用标记语言下的一个应用)、events、实现动画效果,并且方便地为网站提供AJAX交互。jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。jQuery能够使用户的html页面保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。</p>
 </blockquote>
-<h2 id="java与json"><span class="header-section-number">14.2</span> Java与json</h2>
+<h2 id="java与json"><span class="header-section-number">16.2</span> Java与json</h2>
 <blockquote>
 <p>Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象。</p>
 </blockquote>
-<h3 id="android"><span class="header-section-number">14.2.1</span> Android</h3>
-<h2 id="python与json"><span class="header-section-number">14.3</span> Python与json</h2>
+<h3 id="android"><span class="header-section-number">16.2.1</span> Android</h3>
+<h2 id="python与json"><span class="header-section-number">16.3</span> Python与json</h2>
 <blockquote>
 <p>使用pySerial可以使Python很好地在Windows/Linux/BSD上执行串口操作。</p>
 </blockquote>
@@ -2192,7 +2256,7 @@ url=<span class="st">&quot;http://b.phodal.com/athome/1&quot;</span>
 date=urllib2.urlopen(url)
 result=json.load(date)
    <span class="dt">print</span> result</code></pre>
-<h3 id="requests"><span class="header-section-number">14.3.1</span> requests</h3>
+<h3 id="requests"><span class="header-section-number">16.3.1</span> requests</h3>
 <blockquote>
 <p>Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 烂出翔来了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。</p>
 </blockquote>
@@ -2211,20 +2275,20 @@ url = <span class="st">&quot;http://b.phodal.com/athome/1&quot;</span>
 data = {<span class="st">&quot;temperature&quot;</span>: <span class="dv">19</span>, <span class="st">&quot;sensors1&quot;</span>: <span class="dv">32</span>, <span class="st">&quot;sensors2&quot;</span>: <span class="fl">7.5</span>, <span class="st">&quot;led1&quot;</span>: <span class="dv">0</span>, <span class="st">&quot;method&quot;</span>: <span class="st">&quot;PUT&quot;</span>}
 r = requests.put(url, data)
 <span class="dt">print</span> r.text</code></pre>
-<h1 id="前端显示"><span class="header-section-number">15</span> 前端显示</h1>
-<h2 id="库与车轮子"><span class="header-section-number">15.1</span> 库与车轮子</h2>
+<h1 id="前端显示"><span class="header-section-number">17</span> 前端显示</h1>
+<h2 id="库与车轮子"><span class="header-section-number">17.1</span> 库与车轮子</h2>
 <p>在多数的情况下我们都没有理由也没有必要去重新发明我们的车轮,在这时使用库会是一个比较好的做法。</p>
-<h2 id="库"><span class="header-section-number">15.2</span> 库</h2>
-<h3 id="jquery-mobile"><span class="header-section-number">15.2.1</span> jQuery Mobile</h3>
+<h2 id="库"><span class="header-section-number">17.2</span> 库</h2>
+<h3 id="jquery-mobile"><span class="header-section-number">17.2.1</span> jQuery Mobile</h3>
 <blockquote>
 <p>jQuery Mobile是jQuery 在手机上和平板设备上的版本。jQuery Mobile不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架。支持全球主流的移动平台。jQuery Mobile开发团队说:能开发这个项目,我们非常兴奋。移动Web太需要一个跨浏览器的框架,让开发人员开发出真正的移动Web网站。</p>
 </blockquote>
-<h3 id="bootstrap"><span class="header-section-number">15.2.2</span> Bootstrap</h3>
+<h3 id="bootstrap"><span class="header-section-number">17.2.2</span> Bootstrap</h3>
 <blockquote>
 <p>Bootstrap是Twitter推出的一个开源的用于前端开发的工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成。Bootstrap一经推出后颇受欢迎,一直是GitHub上的热门开源项目,包括NASA的MSNBC(微软全国广播公司)的Breaking News都使用了该项目。</p>
 </blockquote>
-<h2 id="网站前台显示"><span class="header-section-number">15.3</span> 网站前台显示</h2>
-<h3 id="highcharts"><span class="header-section-number">15.3.1</span> Highcharts</h3>
+<h2 id="网站前台显示"><span class="header-section-number">17.3</span> 网站前台显示</h2>
+<h3 id="highcharts"><span class="header-section-number">17.3.1</span> Highcharts</h3>
 <p>Highcharts有以下的特点</p>
 <ul>
 <li>兼容性:兼容当今所有的浏览器,包括 iPhone、IE 和火狐等等;</li>
@@ -2241,8 +2305,8 @@ r = requests.put(url, data)
 <div class="figure">
 <img src="./images/temperture.png" alt="Temperture" /><p class="caption">Temperture</p>
 </div>
-<h1 id="构建基于coap协议的物联网系统"><span class="header-section-number">16</span> 构建基于CoAP协议的物联网系统</h1>
-<h2 id="coap-嵌入式系统的rest"><span class="header-section-number">16.1</span> CoAP: 嵌入式系统的REST</h2>
+<h1 id="构建基于coap协议的物联网系统"><span class="header-section-number">18</span> 构建基于CoAP协议的物联网系统</h1>
+<h2 id="coap-嵌入式系统的rest"><span class="header-section-number">18.1</span> CoAP: 嵌入式系统的REST</h2>
 <p>引自维基百科上的介绍,用的是谷歌翻译。。。</p>
 <blockquote>
 <p>受约束的应用协议(COAP)是一种软件协议旨在以非常简单的电子设备,使他们能够在互联网上进行交互式通信中使用。它特别针对小型低功率传感器,开关,阀门和需要被控制或监督远程,通过标准的Internet网络类似的组件。 COAP是一个应用层协议,该协议是用于在资源受限的网络连接设备,例如无线传感器网络节点使用。 COAP被设计为容易地转换为HTTP与Web简化集成,同时也能满足特殊的要求,例如多播支持,非常低的开销,和简单性。多播,低开销,以及简单性是因特网极其重要物联网(IOT)和机器对机器(M2M)设备,这往往是积重难返,有太多的内存和电源,比传统的互联网设备有。因此,效率是非常重要的。 COAP可以在支持UDP或UDP的模拟大多数设备上运行。</p>
@@ -2254,17 +2318,17 @@ r = requests.put(url, data)
 <li>CoAP减少了一些HTTP的方法</li>
 <li>CoAP可以支持检测装置</li>
 </ul>
-<h2 id="coap-命令行工具"><span class="header-section-number">16.2</span> CoAP 命令行工具</h2>
+<h2 id="coap-命令行工具"><span class="header-section-number">18.2</span> CoAP 命令行工具</h2>
 <p>为了测试测试我们的代码是否是正确工作,我们需要一个CoAP的命令行工具。目前有两个不错的工具可以使用。</p>
 <ul>
 <li>CoAP-cli,一个基于NodeJS的CoAP命令行工具,其核心是基于Node-CoAP库。</li>
 <li>libcooap,一个用C写的CoAP命令行工具。</li>
 <li>FireFox Copper, 一个Firefox的插件。</li>
 </ul>
-<h3 id="node-coap-cli"><span class="header-section-number">16.2.1</span> Node CoAP CLI</h3>
+<h3 id="node-coap-cli"><span class="header-section-number">18.2.1</span> Node CoAP CLI</h3>
 <p>安装命令如下</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"> <span class="kw">npm</span> install coap-cli -g </code></pre>
-<h4 id="coap命令行"><span class="header-section-number">16.2.1.1</span> CoAP命令行</h4>
+<h4 id="coap命令行"><span class="header-section-number">18.2.1.1</span> CoAP命令行</h4>
 <p>在coap-cli中,一共有四个方法。分别表示REST的四种不同的方式:</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">Commands</span>:
 
@@ -2279,13 +2343,13 @@ r = requests.put(url, data)
 <p>测试一下现在的最小的物联网系统CoAP版</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">coap</span> get coap://iot-coap.phodal.com/id/1
 <span class="kw">(2.05)</span>  [{<span class="st">&quot;id&quot;</span>:<span class="kw">1</span>,<span class="st">&quot;value&quot;</span>:<span class="st">&quot;is id 1&quot;</span>,<span class="st">&quot;sensors1&quot;</span>:19,<span class="st">&quot;sensors2&quot;</span>:20}]</code></pre>
-<h3 id="libcoap"><span class="header-section-number">16.2.2</span> libcoap</h3>
-<h4 id="mac-os-libcoap安装"><span class="header-section-number">16.2.2.1</span> mac os libcoap安装</h4>
+<h3 id="libcoap"><span class="header-section-number">18.2.2</span> libcoap</h3>
+<h4 id="mac-os-libcoap安装"><span class="header-section-number">18.2.2.1</span> mac os libcoap安装</h4>
 <p>Mac OS下可以直接用</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">brew</span> install libcoap</code></pre>
-<h4 id="ubuntu-libcoap安装"><span class="header-section-number">16.2.2.2</span> Ubuntu libcoap安装</h4>
+<h4 id="ubuntu-libcoap安装"><span class="header-section-number">18.2.2.2</span> Ubuntu libcoap安装</h4>
 <p>Ubuntu GNU/Linux下</p>
-<h4 id="windows-libcoap安装"><span class="header-section-number">16.2.2.3</span> Windows libcoap安装</h4>
+<h4 id="windows-libcoap安装"><span class="header-section-number">18.2.2.3</span> Windows libcoap安装</h4>
 <p>Windows 下</p>
 <p>安装完libcoap,我们可以直接用自带的两个命令</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">coap-client</span> 
@@ -2298,13 +2362,13 @@ r = requests.put(url, data)
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">v</span>:1 t:0 tkl:0 c:1 id:37109
 <span class="kw">This</span> is a test server made with libcoap (see http://libcoap.sf.net) 
 <span class="kw">Copyright</span> (C) <span class="kw">2010--2013</span> Olaf Bergmann <span class="kw">&lt;</span>bergmann@tzi.org<span class="kw">&gt;</span></code></pre>
-<h3 id="firefox-copper"><span class="header-section-number">16.2.3</span> Firefox Copper</h3>
+<h3 id="firefox-copper"><span class="header-section-number">18.2.3</span> Firefox Copper</h3>
 <p>为了能访问<a href="coap://localhost/" class="uri">coap://localhost/</a>,于是我们便需要安装一个Firefox并安装一个名为Copper的插件。</p>
 <ol style="list-style-type: decimal">
 <li><p>下载地址: <a href="https://addons.mozilla.org/en-US/firefox/addon/copper-270430/" class="uri">https://addons.mozilla.org/en-US/firefox/addon/copper-270430/</a></p></li>
 <li><p>作为测试我们同样可以访问 <a href="coap://vs0.inf.ethz.ch:5683/" class="uri">coap://vs0.inf.ethz.ch:5683/</a></p></li>
 </ol>
-<h2 id="coap-helloworld"><span class="header-section-number">16.3</span> CoAP Hello,World</h2>
+<h2 id="coap-helloworld"><span class="header-section-number">18.3</span> CoAP Hello,World</h2>
 <p>接着我们便开始试试做一个简单的CoAP协议的应用:</p>
 <p>这里用到的是一个Nodejs的扩展Node-CoAP</p>
 <blockquote>
@@ -2346,8 +2410,8 @@ r = requests.put(url, data)
 <p>就可以在console上输出</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">Hello</span> World </code></pre>
 <p>也就达到了我们的目的,用CoAP协议创建一个服务,接着我们应该用它创建更多的东西,如产生JSON数据,以及RESTful。和HTTP版的最小物联网系统一样,CoAP版的最小物联网系统也是要返回JSON的。</p>
-<h2 id="coap-数据库查询"><span class="header-section-number">16.4</span> CoAP 数据库查询</h2>
-<h3 id="node-module"><span class="header-section-number">16.4.1</span> Node Module</h3>
+<h2 id="coap-数据库查询"><span class="header-section-number">18.4</span> CoAP 数据库查询</h2>
+<h3 id="node-module"><span class="header-section-number">18.4.1</span> Node Module</h3>
 <p>这说里NodeJS Module的意义是因为我们需要在别的地方引用到db_helper这个库,也就是下一小节要的讲的内容。</p>
 <p>这样我们就可以在server.js类似于这样去引用这个js库。</p>
 <pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> DBHelper = <span class="fu">require</span>(<span class="st">&#39;./db_helper.js&#39;</span>);
@@ -2357,7 +2421,7 @@ r = requests.put(url, data)
 }
 <span class="ot">DBHelper</span>.<span class="fu">initDB</span> = <span class="kw">function</span>(){};
 <span class="ot">module</span>.<span class="fu">exports</span> = DBHelper;</code></pre>
-<h3 id="node-sqlite3"><span class="header-section-number">16.4.2</span> Node-Sqlite3</h3>
+<h3 id="node-sqlite3"><span class="header-section-number">18.4.2</span> Node-Sqlite3</h3>
 <p>这次我们用的是SQLite3(你可以用MySQL,出于安全考虑用SQLite3,SQLite3产生的是一个文件)。一个简单的initDB函数</p>
 <pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> db = <span class="kw">new</span> <span class="ot">sqlite3</span>.<span class="fu">Database</span>(config[<span class="st">&quot;db_name&quot;</span>]);
 <span class="kw">var</span> create_table = <span class="st">&#39;create table if not exists basic (&#39;</span> + config[<span class="st">&quot;db_table&quot;</span>] + <span class="st">&#39;);&#39;</span>;
@@ -2390,7 +2454,7 @@ r = requests.put(url, data)
     });
 };</code></pre>
 <p>将URL传进来,便解析这个参数,接着再放到数据库中查询,再回调回结果。这样我们就可以构成之前所说的查询功能,而我们所谓的post功能似乎也可以用同样的方法加进去。</p>
-<h3 id="查询数据"><span class="header-section-number">16.4.3</span> 查询数据</h3>
+<h3 id="查询数据"><span class="header-section-number">18.4.3</span> 查询数据</h3>
 <p>简单地记录一下在IoT-CoAP中一次获取数据地过程。</p>
 <p>先看看在示例中的Get.js的代码,这关乎在后面server端的代码。</p>
 <pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">const</span> coap       = <span class="fu">require</span>(<span class="st">&#39;coap&#39;</span>)
@@ -2470,7 +2534,7 @@ r = requests.put(url, data)
 };</code></pre>
 <p>当resulst的结果为空时,返回一个404,因为没有数据。这样我们就构成了整个的链,再一步步返回结果。</p>
 <p>在<a href="https://github.com/phodal/iot-coap">IoT-CoAP</a>中我们使用到了一个Block2的东西,于是便整理相关的一些资料,作一个简单的介绍,以及在代码中的使用。</p>
-<h2 id="coap-block"><span class="header-section-number">16.5</span> CoAP Block</h2>
+<h2 id="coap-block"><span class="header-section-number">18.5</span> CoAP Block</h2>
 <p>CoAP是一个RESTful传输协议用于受限设备的节点和网络。基本的CoAP消息是一个不错的选择对于小型载荷如</p>
 <ul>
 <li>温度传感器</li>
@@ -2481,7 +2545,7 @@ r = requests.put(url, data)
 <p>CoAP是同UDP与DLTS一样是基于数据报传输的,这限制了资源表示(resource representation)的最大大小,使得传输不需要太多的分割。虽然UDP支持通过IP分片传输更大的有效载荷,且仅限于64KiB,更重要的是,并没有真正很好地约束应用和网络。</p>
 <p>而不是依赖于IP分片,这种规范基本COAP了对“块”选项,用于传输信息从多个资源区块的请求 - 响应对。在许多重要的情况下,阻止使服务器能够真正无状态:服务器可以处理每块分开传输,而无需建立连接以前的数据块传输的其他服务器端内存。</p>
 <p>综上所述,块(Block)选项提供了传送一个最小的在分块的方式更大的陈述。</p>
-<h3 id="coap-post"><span class="header-section-number">16.5.1</span> CoAP POST</h3>
+<h3 id="coap-post"><span class="header-section-number">18.5.1</span> CoAP POST</h3>
 <p>看看在IoT CoAP中的post示例。</p>
 <pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">const</span> coap     = <span class="fu">require</span>(<span class="st">&#39;coap&#39;</span>)
       ,request  = <span class="ot">coap</span>.<span class="fu">request</span>
@@ -2514,7 +2578,7 @@ r = requests.put(url, data)
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">[</span> <span class="st">&#39;1&#39;</span>, <span class="st">&#39;\&#39;</span>must<span class="dt">\&#39;</span><span class="st">&#39;, &#39;</span>23<span class="st">&#39;, &#39;</span>12<span class="st">&#39; ]</span></code></pre>
 <p>便可以很愉快地将其post到数据库中了,</p>
 <p>在做IoT-CoAP的过程中只支持JSON,查阅CoAP的草稿时发现支持了诸多的Content Types。</p>
-<h3 id="coap-content-types"><span class="header-section-number">16.5.2</span> CoAP Content Types</h3>
+<h3 id="coap-content-types"><span class="header-section-number">18.5.2</span> CoAP Content Types</h3>
 <p>以下文字来自谷歌翻译:</p>
 <blockquote>
 <p>互联网媒体类型是通过HTTP字符串标识,如“application/xml”。该字符串是由一个顶层的类型“applicaion”和子类型的“XML”。为了尽量减少使用这些类型的媒体类型来表示的开销消息有效载荷,COAP定义一个标识符编码方案互联网媒体类型的子集。预计这桌将可扩展标识符的值的IANA维护。内容类型选项被格式化为一个8位无符号整数。初始映射到一个合适的互联网媒体类型标识符表所示。复合型高层次类型(multipart和不支持消息)。标识符值是从201-255保留的特定于供应商的,应用程序特定的或实验使用和不由IANA。</p>
@@ -2687,7 +2751,7 @@ r = requests.put(url, data)
 </table>
 <p>简单地说就是:</p>
 <p><code>诸如application/json的Content Types在CoAP中应该是50</code>。如上表所示的结果是其对应的结果,这样的话可以减少传递的信息量。</p>
-<h2 id="coap-json"><span class="header-section-number">16.6</span> CoAP JSON</h2>
+<h2 id="coap-json"><span class="header-section-number">18.6</span> CoAP JSON</h2>
 <p>于是在一开始的时候首先支持的便是“application/json”这样的类型。</p>
 <p>首先判断请求的header</p>
 <pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">request_helper</span>.<span class="fu">getHandler</span> = <span class="kw">function</span>(req, res) {
@@ -2758,7 +2822,7 @@ r = requests.put(url, data)
     })
 }</code></pre>
 <p>并且全部都显示出来,设计得真是有点不行,不过现在已经差不多了。</p>
-<h2 id="使用iot-coap构建物联网"><span class="header-section-number">16.7</span> 使用IoT-CoAP构建物联网</h2>
+<h2 id="使用iot-coap构建物联网"><span class="header-section-number">18.7</span> 使用IoT-CoAP构建物联网</h2>
 <p><code>注意</code>:windows系统npm install失败时,需要自己建立一个C:and Settings[USERNAME]Data文件</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">npm</span> install iot-coap</code></pre>
 <p>new a file <code>index.js</code>(新建index.js)</p>
@@ -2810,12 +2874,12 @@ r = requests.put(url, data)
 <p>show:</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">coap</span> listening at coap://0.0.0.0:5683
 <span class="kw">restify</span> listening at http://0.0.0.0:8848</code></pre>
-<h1 id="mqtt"><span class="header-section-number">17</span> MQTT</h1>
+<h1 id="mqtt"><span class="header-section-number">19</span> MQTT</h1>
 <blockquote>
 <p>MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。</p>
 </blockquote>
 <p>早在1999年,IBM的Andy Stanford-Clark博士以及Arcom公司ArlenNipper博士发明了MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)技术[1] 。据Andy Stanford-Clark博士称,MQTT将在今年和明年呈现爆炸式增长。</p>
-<h2 id="nodejs-mqtt"><span class="header-section-number">17.1</span> Nodejs MQTT</h2>
+<h2 id="nodejs-mqtt"><span class="header-section-number">19.1</span> Nodejs MQTT</h2>
 <blockquote>
 <p><a href="https://github.com/adamvr/MQTT.js/">mqtt.js</a> is a library for the MQTT protocol, written in JavaScript to be used in node.js.</p>
 </blockquote>
@@ -2831,9 +2895,9 @@ client = <span class="ot">mqtt</span>.<span class="fu">createClient</span>(<span
 });
 
 <span class="ot">client</span>.<span class="fu">end</span>();</code></pre>
-<h1 id="尾声"><span class="header-section-number">18</span> 尾声</h1>
-<h2 id="路"><span class="header-section-number">18.1</span> 路</h2>
-<h2 id="其他-2"><span class="header-section-number">18.2</span> 其他</h2>
+<h1 id="尾声"><span class="header-section-number">20</span> 尾声</h1>
+<h2 id="路"><span class="header-section-number">20.1</span> 路</h2>
+<h2 id="其他-2"><span class="header-section-number">20.2</span> 其他</h2>
 <p>意见及建议: <a href="https://github.com/phodal/designiot/issues" class="uri">https://github.com/phodal/designiot/issues</a></p>
 <p>邮箱: <a href="h@phodal.com" class="uri">h@phodal.com</a></p>
 <div class="footnotes">

BIN
images/rpi.jpg


+ 203 - 144
index.html

@@ -169,97 +169,105 @@ code > span.er { color: #ff0000; font-weight: bold; }
 <li><a href="#geek的盛宴"><span class="toc-section-number">9.1</span> Geek的盛宴</a></li>
 <li><a href="#raspberry-pi-初始化"><span class="toc-section-number">9.2</span> Raspberry Pi 初始化</a></li>
 <li><a href="#raspberry-pi-gpio"><span class="toc-section-number">9.3</span> Raspberry Pi GPIO</a></li>
+<li><a href="#raspberry-pi-1"><span class="toc-section-number">9.4</span> Raspberry Pi</a></li>
 </ul></li>
-<li><a href="#http与restful"><span class="toc-section-number">10</span> HTTP与RESTful</a><ul>
-<li><a href="#你所没有深入的http"><span class="toc-section-number">10.1</span> 你所没有深入的HTTP</a><ul>
-<li><a href="#打开网页时发生了什么"><span class="toc-section-number">10.1.1</span> 打开网页时发生了什么</a></li>
-<li><a href="#url组成"><span class="toc-section-number">10.1.2</span> URL组成</a></li>
+<li><a href="#server"><span class="toc-section-number">10</span> Server</a><ul>
+<li><a href="#服务器"><span class="toc-section-number">10.1</span> 服务器</a></li>
+<li><a href="#web服务器"><span class="toc-section-number">10.2</span> Web服务器</a></li>
 </ul></li>
-<li><a href="#一次http-get请求"><span class="toc-section-number">10.2</span> 一次HTTP GET请求</a><ul>
-<li><a href="#http响应"><span class="toc-section-number">10.2.1</span> HTTP响应</a></li>
+<li><a href="#web服务"><span class="toc-section-number">11</span> Web服务</a><ul>
+<li><a href="#soap-vs-restful"><span class="toc-section-number">11.1</span> SOAP VS RESTful</a></li>
 </ul></li>
-<li><a href="#rest"><span class="toc-section-number">10.3</span> REST</a><ul>
-<li><a href="#资源"><span class="toc-section-number">10.3.1</span> 资源</a></li>
+<li><a href="#http与restful"><span class="toc-section-number">12</span> HTTP与RESTful</a><ul>
+<li><a href="#你所没有深入的http"><span class="toc-section-number">12.1</span> 你所没有深入的HTTP</a><ul>
+<li><a href="#打开网页时发生了什么"><span class="toc-section-number">12.1.1</span> 打开网页时发生了什么</a></li>
+<li><a href="#url组成"><span class="toc-section-number">12.1.2</span> URL组成</a></li>
 </ul></li>
+<li><a href="#一次http-get请求"><span class="toc-section-number">12.2</span> 一次HTTP GET请求</a><ul>
+<li><a href="#http响应"><span class="toc-section-number">12.2.1</span> HTTP响应</a></li>
 </ul></li>
-<li><a href="#设计restful-api"><span class="toc-section-number">11</span> 设计RESTful API</a><ul>
-<li><a href="#rest关键目标"><span class="toc-section-number">11.1</span> REST关键目标</a></li>
-<li><a href="#判断是否是-restful的约束条件"><span class="toc-section-number">11.2</span> 判断是否是 RESTful的约束条件</a></li>
-<li><a href="#设计restful资源"><span class="toc-section-number">11.3</span> 设计RESTful资源</a></li>
-<li><a href="#设计restful-uri"><span class="toc-section-number">11.4</span> 设计RESTful URI</a></li>
-<li><a href="#json"><span class="toc-section-number">11.5</span> JSON</a></li>
+<li><a href="#rest"><span class="toc-section-number">12.3</span> REST</a><ul>
+<li><a href="#资源"><span class="toc-section-number">12.3.1</span> 资源</a></li>
 </ul></li>
-<li><a href="#rest服务准备"><span class="toc-section-number">12</span> REST服务准备</a><ul>
-<li><a href="#laravel"><span class="toc-section-number">12.1</span> Laravel</a><ul>
-<li><a href="#为什么是-laravel"><span class="toc-section-number">12.1.1</span> 为什么是 Laravel</a></li>
 </ul></li>
-<li><a href="#安装-laravel"><span class="toc-section-number">12.2</span> 安装 Laravel</a><ul>
-<li><a href="#gnulinux安装composer"><span class="toc-section-number">12.2.1</span> GNU/Linux安装Composer</a></li>
+<li><a href="#设计restful-api"><span class="toc-section-number">13</span> 设计RESTful API</a><ul>
+<li><a href="#rest关键目标"><span class="toc-section-number">13.1</span> REST关键目标</a></li>
+<li><a href="#判断是否是-restful的约束条件"><span class="toc-section-number">13.2</span> 判断是否是 RESTful的约束条件</a></li>
+<li><a href="#设计restful资源"><span class="toc-section-number">13.3</span> 设计RESTful资源</a></li>
+<li><a href="#设计restful-uri"><span class="toc-section-number">13.4</span> 设计RESTful URI</a></li>
+<li><a href="#json"><span class="toc-section-number">13.5</span> JSON</a></li>
 </ul></li>
-<li><a href="#mysql"><span class="toc-section-number">12.3</span> MySQL</a><ul>
-<li><a href="#安装mysql-1"><span class="toc-section-number">12.3.1</span> 安装MySQL</a></li>
-<li><a href="#配置mysql"><span class="toc-section-number">12.3.2</span> 配置MySQL</a></li>
+<li><a href="#rest服务准备"><span class="toc-section-number">14</span> REST服务准备</a><ul>
+<li><a href="#laravel"><span class="toc-section-number">14.1</span> Laravel</a><ul>
+<li><a href="#为什么是-laravel"><span class="toc-section-number">14.1.1</span> 为什么是 Laravel</a></li>
 </ul></li>
+<li><a href="#安装-laravel"><span class="toc-section-number">14.2</span> 安装 Laravel</a><ul>
+<li><a href="#gnulinux安装composer"><span class="toc-section-number">14.2.1</span> GNU/Linux安装Composer</a></li>
 </ul></li>
-<li><a href="#创建rest服务"><span class="toc-section-number">13</span> 创建REST服务</a><ul>
-<li><a href="#数据库迁移"><span class="toc-section-number">13.1</span> 数据库迁移</a><ul>
-<li><a href="#创建表"><span class="toc-section-number">13.1.1</span> 创建表</a></li>
-<li><a href="#数据库迁移-1"><span class="toc-section-number">13.1.2</span> 数据库迁移</a></li>
+<li><a href="#mysql"><span class="toc-section-number">14.3</span> MySQL</a><ul>
+<li><a href="#安装mysql-1"><span class="toc-section-number">14.3.1</span> 安装MySQL</a></li>
+<li><a href="#配置mysql"><span class="toc-section-number">14.3.2</span> 配置MySQL</a></li>
 </ul></li>
-<li><a href="#创建restful"><span class="toc-section-number">13.2</span> 创建RESTful</a></li>
-<li><a href="#laravel-resources"><span class="toc-section-number">13.3</span> Laravel Resources</a><ul>
-<li><a href="#修改create"><span class="toc-section-number">13.3.1</span> 修改Create()</a></li>
-<li><a href="#创建表单"><span class="toc-section-number">13.3.2</span> 创建表单</a></li>
-<li><a href="#编辑模板"><span class="toc-section-number">13.3.3</span> 编辑模板</a></li>
 </ul></li>
+<li><a href="#创建rest服务"><span class="toc-section-number">15</span> 创建REST服务</a><ul>
+<li><a href="#数据库迁移"><span class="toc-section-number">15.1</span> 数据库迁移</a><ul>
+<li><a href="#创建表"><span class="toc-section-number">15.1.1</span> 创建表</a></li>
+<li><a href="#数据库迁移-1"><span class="toc-section-number">15.1.2</span> 数据库迁移</a></li>
 </ul></li>
-<li><a href="#restful-evertywhere"><span class="toc-section-number">14</span> RESTful Evertywhere</a><ul>
-<li><a href="#javascript与ajax"><span class="toc-section-number">14.1</span> Javascript与ajax</a><ul>
-<li><a href="#jquery"><span class="toc-section-number">14.1.1</span> jQuery</a></li>
+<li><a href="#创建restful"><span class="toc-section-number">15.2</span> 创建RESTful</a></li>
+<li><a href="#laravel-resources"><span class="toc-section-number">15.3</span> Laravel Resources</a><ul>
+<li><a href="#修改create"><span class="toc-section-number">15.3.1</span> 修改Create()</a></li>
+<li><a href="#创建表单"><span class="toc-section-number">15.3.2</span> 创建表单</a></li>
+<li><a href="#编辑模板"><span class="toc-section-number">15.3.3</span> 编辑模板</a></li>
 </ul></li>
-<li><a href="#java与json"><span class="toc-section-number">14.2</span> Java与json</a><ul>
-<li><a href="#android"><span class="toc-section-number">14.2.1</span> Android</a></li>
 </ul></li>
-<li><a href="#python与json"><span class="toc-section-number">14.3</span> Python与json</a><ul>
-<li><a href="#requests"><span class="toc-section-number">14.3.1</span> requests</a></li>
+<li><a href="#restful-evertywhere"><span class="toc-section-number">16</span> RESTful Evertywhere</a><ul>
+<li><a href="#javascript与ajax"><span class="toc-section-number">16.1</span> Javascript与ajax</a><ul>
+<li><a href="#jquery"><span class="toc-section-number">16.1.1</span> jQuery</a></li>
 </ul></li>
+<li><a href="#java与json"><span class="toc-section-number">16.2</span> Java与json</a><ul>
+<li><a href="#android"><span class="toc-section-number">16.2.1</span> Android</a></li>
 </ul></li>
-<li><a href="#前端显示"><span class="toc-section-number">15</span> 前端显示</a><ul>
-<li><a href="#库与车轮子"><span class="toc-section-number">15.1</span> 库与车轮子</a></li>
-<li><a href="#库"><span class="toc-section-number">15.2</span> 库</a><ul>
-<li><a href="#jquery-mobile"><span class="toc-section-number">15.2.1</span> jQuery Mobile</a></li>
-<li><a href="#bootstrap"><span class="toc-section-number">15.2.2</span> Bootstrap</a></li>
+<li><a href="#python与json"><span class="toc-section-number">16.3</span> Python与json</a><ul>
+<li><a href="#requests"><span class="toc-section-number">16.3.1</span> requests</a></li>
 </ul></li>
-<li><a href="#网站前台显示"><span class="toc-section-number">15.3</span> 网站前台显示</a><ul>
-<li><a href="#highcharts"><span class="toc-section-number">15.3.1</span> Highcharts</a></li>
 </ul></li>
+<li><a href="#前端显示"><span class="toc-section-number">17</span> 前端显示</a><ul>
+<li><a href="#库与车轮子"><span class="toc-section-number">17.1</span> 库与车轮子</a></li>
+<li><a href="#库"><span class="toc-section-number">17.2</span> 库</a><ul>
+<li><a href="#jquery-mobile"><span class="toc-section-number">17.2.1</span> jQuery Mobile</a></li>
+<li><a href="#bootstrap"><span class="toc-section-number">17.2.2</span> Bootstrap</a></li>
 </ul></li>
-<li><a href="#构建基于coap协议的物联网系统"><span class="toc-section-number">16</span> 构建基于CoAP协议的物联网系统</a><ul>
-<li><a href="#coap-嵌入式系统的rest"><span class="toc-section-number">16.1</span> CoAP: 嵌入式系统的REST</a></li>
-<li><a href="#coap-命令行工具"><span class="toc-section-number">16.2</span> CoAP 命令行工具</a><ul>
-<li><a href="#node-coap-cli"><span class="toc-section-number">16.2.1</span> Node CoAP CLI</a></li>
-<li><a href="#libcoap"><span class="toc-section-number">16.2.2</span> libcoap</a></li>
-<li><a href="#firefox-copper"><span class="toc-section-number">16.2.3</span> Firefox Copper</a></li>
+<li><a href="#网站前台显示"><span class="toc-section-number">17.3</span> 网站前台显示</a><ul>
+<li><a href="#highcharts"><span class="toc-section-number">17.3.1</span> Highcharts</a></li>
 </ul></li>
-<li><a href="#coap-helloworld"><span class="toc-section-number">16.3</span> CoAP Hello,World</a></li>
-<li><a href="#coap-数据库查询"><span class="toc-section-number">16.4</span> CoAP 数据库查询</a><ul>
-<li><a href="#node-module"><span class="toc-section-number">16.4.1</span> Node Module</a></li>
-<li><a href="#node-sqlite3"><span class="toc-section-number">16.4.2</span> Node-Sqlite3</a></li>
-<li><a href="#查询数据"><span class="toc-section-number">16.4.3</span> 查询数据</a></li>
 </ul></li>
-<li><a href="#coap-block"><span class="toc-section-number">16.5</span> CoAP Block</a><ul>
-<li><a href="#coap-post"><span class="toc-section-number">16.5.1</span> CoAP POST</a></li>
-<li><a href="#coap-content-types"><span class="toc-section-number">16.5.2</span> CoAP Content Types</a></li>
+<li><a href="#构建基于coap协议的物联网系统"><span class="toc-section-number">18</span> 构建基于CoAP协议的物联网系统</a><ul>
+<li><a href="#coap-嵌入式系统的rest"><span class="toc-section-number">18.1</span> CoAP: 嵌入式系统的REST</a></li>
+<li><a href="#coap-命令行工具"><span class="toc-section-number">18.2</span> CoAP 命令行工具</a><ul>
+<li><a href="#node-coap-cli"><span class="toc-section-number">18.2.1</span> Node CoAP CLI</a></li>
+<li><a href="#libcoap"><span class="toc-section-number">18.2.2</span> libcoap</a></li>
+<li><a href="#firefox-copper"><span class="toc-section-number">18.2.3</span> Firefox Copper</a></li>
 </ul></li>
-<li><a href="#coap-json"><span class="toc-section-number">16.6</span> CoAP JSON</a></li>
-<li><a href="#使用iot-coap构建物联网"><span class="toc-section-number">16.7</span> 使用IoT-CoAP构建物联网</a></li>
+<li><a href="#coap-helloworld"><span class="toc-section-number">18.3</span> CoAP Hello,World</a></li>
+<li><a href="#coap-数据库查询"><span class="toc-section-number">18.4</span> CoAP 数据库查询</a><ul>
+<li><a href="#node-module"><span class="toc-section-number">18.4.1</span> Node Module</a></li>
+<li><a href="#node-sqlite3"><span class="toc-section-number">18.4.2</span> Node-Sqlite3</a></li>
+<li><a href="#查询数据"><span class="toc-section-number">18.4.3</span> 查询数据</a></li>
 </ul></li>
-<li><a href="#mqtt"><span class="toc-section-number">17</span> MQTT</a><ul>
-<li><a href="#nodejs-mqtt"><span class="toc-section-number">17.1</span> Nodejs MQTT</a></li>
+<li><a href="#coap-block"><span class="toc-section-number">18.5</span> CoAP Block</a><ul>
+<li><a href="#coap-post"><span class="toc-section-number">18.5.1</span> CoAP POST</a></li>
+<li><a href="#coap-content-types"><span class="toc-section-number">18.5.2</span> CoAP Content Types</a></li>
 </ul></li>
-<li><a href="#尾声"><span class="toc-section-number">18</span> 尾声</a><ul>
-<li><a href="#路"><span class="toc-section-number">18.1</span> 路</a></li>
-<li><a href="#其他-2"><span class="toc-section-number">18.2</span> 其他</a></li>
+<li><a href="#coap-json"><span class="toc-section-number">18.6</span> CoAP JSON</a></li>
+<li><a href="#使用iot-coap构建物联网"><span class="toc-section-number">18.7</span> 使用IoT-CoAP构建物联网</a></li>
+</ul></li>
+<li><a href="#mqtt"><span class="toc-section-number">19</span> MQTT</a><ul>
+<li><a href="#nodejs-mqtt"><span class="toc-section-number">19.1</span> Nodejs MQTT</a></li>
+</ul></li>
+<li><a href="#尾声"><span class="toc-section-number">20</span> 尾声</a><ul>
+<li><a href="#路"><span class="toc-section-number">20.1</span> 路</a></li>
+<li><a href="#其他-2"><span class="toc-section-number">20.2</span> 其他</a></li>
 </ul></li>
 </ul>
 </div>
@@ -1530,6 +1538,9 @@ a process or set of rules to be followed in calculations or other problem-solvin
 <li>pip 是目前 python 包管理的事实标准,2008年发布。它被用作 easy_install 的替代品,但是它仍有大量的功能建立在 setuptools 组件之上。</li>
 </ul>
 <h1 id="raspberry-pi"><span class="header-section-number">9</span> Raspberry Pi</h1>
+<div class="figure">
+<img src="./images/rpi.jpg" alt="Raspberry Pi" /><p class="caption">Raspberry Pi</p>
+</div>
 <h2 id="geek的盛宴"><span class="header-section-number">9.1</span> Geek的盛宴</h2>
 <p>Raspberry Pi是一款针对电脑业余爱好者、教师、小学生以及小型企业等用户的迷你电脑,预装Linux系统,体积仅信用卡大小,搭载ARM架构处理器,运算性能和智能手机相仿。在接口方面,Raspberry Pi提供了可供键鼠使用的USB接口,此外还有千兆以太网接口、SD卡扩展接口以及1个HDMI高清视频输出接口,可与显示器或者TV相连。</p>
 <p>Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。</p>
@@ -1561,8 +1572,30 @@ a process or set of rules to be followed in calculations or other problem-solvin
 <div class="figure">
 <img src="./images/gpio.png" alt="GPIO" /><p class="caption">GPIO</p>
 </div>
-<h1 id="http与restful"><span class="header-section-number">10</span> HTTP与RESTful</h1>
-<h2 id="你所没有深入的http"><span class="header-section-number">10.1</span> 你所没有深入的HTTP</h2>
+<h2 id="raspberry-pi-1"><span class="header-section-number">9.4</span> Raspberry Pi</h2>
+<h1 id="server"><span class="header-section-number">10</span> Server</h1>
+<h2 id="服务器"><span class="header-section-number">10.1</span> 服务器</h2>
+<p>服务器(Server)指:</p>
+<ul>
+<li><p>一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器(能使用户在其它计算机访问文件),数据库服务器和应用程序服务器。</p></li>
+<li><p>运行以上软件的计算机,或称为网络主机(Host)。</p></li>
+<li><p>一般来说,服务器通过网络对外提供服务。可以通过Intranet对内网提供服务,也可以通过Internet对外提供服务。</p></li>
+</ul>
+<h2 id="web服务器"><span class="header-section-number">10.2</span> Web服务器</h2>
+<p>WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。 WWW 是 Internet的多媒体信息查询工具,是 Internet 上近年才发展起来的服务,也是发展最快和目前用的最广泛的服务。正是因为有了WWW工具,才使得近年来 Internet 迅速发展,且用户数量飞速增长。</p>
+<h1 id="web服务"><span class="header-section-number">11</span> Web服务</h1>
+<p>Web服务是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。</p>
+<p>根据W3C的定义,Web服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作。网络服务通常是许多应用程序接口(API)所组成的,它们透过网络,例如国际互联网(Internet)的远程服务器端,执行客户所提交服务的请求。</p>
+<p>尽管W3C的定义涵盖诸多相异且无法介分的系统,不过通常我们指有关于主从式架构(Client-server)之间根据SOAP协议进行传递XML格式消息。无论定义还是实现,WEB服务过程中会由服务器提供一个机器可读的描述(通常基于WSDL)以辨识服务器所提供的WEB服务。另外,虽然WSDL不是SOAP服务端点的必要条件,但目前基于Java的主流WEB服务开发框架往往需要WSDL实现客户端的源代码生成。一些工业标准化组织,比如WS-I,就在WEB服务定义中强制包含SOAP和WSDL。</p>
+<p>WEB服务实际上是一组工具,并有多种不同的方法调用之。三种最普遍的手段是:</p>
+<ul>
+<li>远程过程调用(RPC)</li>
+<li>面向服务架构(SOA)</li>
+<li>表述性状态转移(REST)。</li>
+</ul>
+<h2 id="soap-vs-restful"><span class="header-section-number">11.1</span> SOAP VS RESTful</h2>
+<h1 id="http与restful"><span class="header-section-number">12</span> HTTP与RESTful</h1>
+<h2 id="你所没有深入的http"><span class="header-section-number">12.1</span> 你所没有深入的HTTP</h2>
 <p>Internet有两个核心协议: IP和TCP,这样讲述起来似乎会很漫长。</p>
 <p>基本概念</p>
 <blockquote>
@@ -1573,7 +1606,7 @@ a process or set of rules to be followed in calculations or other problem-solvin
 <li>传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的。</li>
 </ul>
 <p><code>注意</code>: HTTP协议只规定了客户端与服务端的通信规则,而没有规定其通讯协议,只是现在的大部分实现都是将TCP作为通讯协议。</p>
-<h3 id="打开网页时发生了什么"><span class="header-section-number">10.1.1</span> 打开网页时发生了什么</h3>
+<h3 id="打开网页时发生了什么"><span class="header-section-number">12.1.1</span> 打开网页时发生了什么</h3>
 <p>简单地来说,当我们在浏览器上输入URL的敲下回车的时候。</p>
 <ul>
 <li>浏览器需要查找域名<a href="#fn2" class="footnoteRef" id="fnref2"><sup>2</sup></a>的IP,从不同的缓存直至DNS服务器。</li>
@@ -1603,7 +1636,7 @@ a process or set of rules to be followed in calculations or other problem-solvin
 <li>从对应的服务器下载资源</li>
 </ol>
 <p>说说第一步,开始时我们输入的是URI(统一资源标识符,Uniform Resource Identifier),它还有另外一个名字叫统一资源定位器(URL<a href="#fn3" class="footnoteRef" id="fnref3"><sup>3</sup></a>,Uniform Resource Locator)。</p>
-<h3 id="url组成"><span class="header-section-number">10.1.2</span> URL组成</h3>
+<h3 id="url组成"><span class="header-section-number">12.1.2</span> URL组成</h3>
 <p>网址算是URL的一个俗称,让我们来看看一个URL的组成,以HTTP版IOT中的URL为例。</p>
 <p><code>http://b.phodal.com/athome/1</code></p>
 <p>开始之前,我们需要标出URL的80端口以及json文件的全称,那么上面的网址就会变成</p>
@@ -1622,7 +1655,7 @@ a process or set of rules to be followed in calculations or other problem-solvin
 <p>这里的<code>#</code>后面是锚部分,如果你打开这个URL就会发现会直接跳转到相应的锚部分,对就于下面这样的一个例子来说</p>
 <p><code>http://www.phodal.com/search/?q=iot&amp;type=blog</code></p>
 <p><code>?</code>后面的<code>q=iot&amp;type=blog</code>的部分是参数部分,通常用于查询或者、搜索。</p>
-<h2 id="一次http-get请求"><span class="header-section-number">10.2</span> 一次HTTP GET请求</h2>
+<h2 id="一次http-get请求"><span class="header-section-number">12.2</span> 一次HTTP GET请求</h2>
 <p>当我们打开最小物联网系统的一个页面时,如<a href="http://b.phodal.com/athome/1.json" class="uri">http://b.phodal.com/athome/1.json</a></p>
 <p>我们在浏览器上看到的结果是</p>
 <pre class="sourceCode javascript"><code class="sourceCode javascript">[
@@ -1643,14 +1676,14 @@ a process or set of rules to be followed in calculations or other problem-solvin
 
 [<span class="dt">{&quot;id&quot;:1,&quot;temperature&quot;:19,&quot;sensors1&quot;:31,&quot;sensors2&quot;:7.5,&quot;led1&quot;:0}</span>]</code></pre>
 <p>我们用curl命令向服务器发起了GET请求,服务器返回了上面的结果。</p>
-<h3 id="http响应"><span class="header-section-number">10.2.1</span> HTTP响应</h3>
+<h3 id="http响应"><span class="header-section-number">12.2.1</span> HTTP响应</h3>
 <p>一个HTTP响应由三部分组成</p>
 <ul>
 <li>状态行(状态码)</li>
 <li>消息报头(响应报头)</li>
 <li>响应正文(消息体)</li>
 </ul>
-<h4 id="http响应-状态码"><span class="header-section-number">10.2.1.1</span> HTTP响应 状态码</h4>
+<h4 id="http响应-状态码"><span class="header-section-number">12.2.1.1</span> HTTP响应 状态码</h4>
 <p>在上面的结果中,状态行是</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">HTTP/1.1</span> 200 OK</code></pre>
 <p>返回的状态码是200,OK是状态码的原因短语。</p>
@@ -1681,14 +1714,14 @@ a process or set of rules to be followed in calculations or other problem-solvin
 <li>422 unprocessable entity - 校验错误时用。</li>
 <li>429 too many request - 请求过多。</li>
 </ul>
-<h4 id="http响应-响应报头"><span class="header-section-number">10.2.1.2</span> HTTP响应 响应报头</h4>
+<h4 id="http响应-响应报头"><span class="header-section-number">12.2.1.2</span> HTTP响应 响应报头</h4>
 <p>在这次响应中,返回了两个报头,即</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">Content-Type</span>: application/json
 <span class="kw">Date</span>: Fri, 05 Sep 2014 15:05:49 GMT</code></pre>
 <p>Content-Type和Date,在这里的Context-Type是application/json,而通常情况下我们打开一个网站时,他的Content-Type应该是text/html。</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">Content-Type</span>: text/html<span class="kw">;</span></code></pre>
 <p>Content-Type是最重要的报头。</p>
-<h4 id="http响应-响应正文"><span class="header-section-number">10.2.1.3</span> HTTP响应 响应正文</h4>
+<h4 id="http响应-响应正文"><span class="header-section-number">12.2.1.3</span> HTTP响应 响应正文</h4>
 <p>正文才是我们真正想要的内容,上面的都是写给浏览器看的,一般的人不会去关注这些。</p>
 <pre class="sourceCode javascript"><code class="sourceCode javascript">HTTP/<span class="fl">1.1</span> <span class="dv">200</span> OK
 Server: <span class="ot">phodal</span>.<span class="fu">com</span>/<span class="fl">0.17.5</span>
@@ -1727,23 +1760,49 @@ Content-Type: application/json
 <li>《RESTful Web Services Cookbook》</li>
 <li>《RESTful Web APIs》</li>
 </ul>
-<h2 id="rest"><span class="header-section-number">10.3</span> REST</h2>
+<h2 id="rest"><span class="header-section-number">12.3</span> REST</h2>
 <blockquote>
 <p>REST从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表征。获得这些表征致使这些应用程序转变了其状态。随着不断获取资源的表征,客户端应用不断地在转变着其状态,所谓表征状态转移。</p>
 </blockquote>
 <p>因为我们需要的是一个Machine到Machine沟通的平台,需要设计一个API。而设计一个API来说,RESTful是很不错的一种选择,也是主流的选择。而设计一个RESTful服务,的首要步骤便是设计资源模型。</p>
-<h3 id="资源"><span class="header-section-number">10.3.1</span> 资源</h3>
+<h3 id="资源"><span class="header-section-number">12.3.1</span> 资源</h3>
 <p>互联网上的一切信息都可以看作是一种资源。</p>
-<h1 id="设计restful-api"><span class="header-section-number">11</span> 设计RESTful API</h1>
+<table>
+<thead>
+<tr class="header">
+<th align="left">HTTP Method</th>
+<th align="left">Operation Performed</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td align="left">GET</td>
+<td align="left">Get a resource (Read a resource)</td>
+</tr>
+<tr class="even">
+<td align="left">POST</td>
+<td align="left">Create a resource</td>
+</tr>
+<tr class="odd">
+<td align="left">PUT</td>
+<td align="left">Update a resource</td>
+</tr>
+<tr class="even">
+<td align="left">DELETE</td>
+<td align="left">Delete Resource</td>
+</tr>
+</tbody>
+</table>
+<h1 id="设计restful-api"><span class="header-section-number">13</span> 设计RESTful API</h1>
 <p>设计RESTful API是一个有意思的话题。下面是一些常用的RESTful设计原则:</p>
-<h2 id="rest关键目标"><span class="header-section-number">11.1</span> REST关键目标</h2>
+<h2 id="rest关键目标"><span class="header-section-number">13.1</span> REST关键目标</h2>
 <ul>
 <li>组件间交互的可伸缩性</li>
 <li>接口的通用性</li>
 <li>组件的独立部署</li>
 <li>通过中间组件来减少延迟、实施安全策略和封装已有系统</li>
 </ul>
-<h2 id="判断是否是-restful的约束条件"><span class="header-section-number">11.2</span> 判断是否是 RESTful的约束条件</h2>
+<h2 id="判断是否是-restful的约束条件"><span class="header-section-number">13.2</span> 判断是否是 RESTful的约束条件</h2>
 <ul>
 <li>客户端-服务器分离</li>
 <li>无状态</li>
@@ -1752,14 +1811,14 @@ Content-Type: application/json
 <li>统一接口</li>
 <li>随需代码(可选)</li>
 </ul>
-<h2 id="设计restful资源"><span class="header-section-number">11.3</span> 设计RESTful资源</h2>
-<h2 id="设计restful-uri"><span class="header-section-number">11.4</span> 设计RESTful URI</h2>
-<h2 id="json"><span class="header-section-number">11.5</span> JSON</h2>
+<h2 id="设计restful资源"><span class="header-section-number">13.3</span> 设计RESTful资源</h2>
+<h2 id="设计restful-uri"><span class="header-section-number">13.4</span> 设计RESTful URI</h2>
+<h2 id="json"><span class="header-section-number">13.5</span> JSON</h2>
 <div class="figure">
 <img src="./images/xml-vs-json.png" alt="xml-vs-json" /><p class="caption">xml-vs-json</p>
 </div>
-<h1 id="rest服务准备"><span class="header-section-number">12</span> REST服务准备</h1>
-<h2 id="laravel"><span class="header-section-number">12.1</span> Laravel</h2>
+<h1 id="rest服务准备"><span class="header-section-number">14</span> REST服务准备</h1>
+<h2 id="laravel"><span class="header-section-number">14.1</span> Laravel</h2>
 <blockquote>
 <p>Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。</p>
 </blockquote>
@@ -1773,28 +1832,28 @@ Content-Type: application/json
 <li>强大的社区支持: 无论你是一个PHP新手还是经验丰富的架构师,都能在社区中找到需要的知识。你可以在IRC中讨论Idea,或者在论坛中发布问题。</li>
 <li>测试、重构: Laravel 从开始就将测试作为重点功能。我们提供了灵活的IoC容器,集成了PHPUnit 测试工具。不用担心,这些都很容易上手。</li>
 </ul>
-<h3 id="为什么是-laravel"><span class="header-section-number">12.1.1</span> 为什么是 Laravel</h3>
+<h3 id="为什么是-laravel"><span class="header-section-number">14.1.1</span> 为什么是 Laravel</h3>
 <ul>
 <li>因为个人喜爱,你也可以用 Ruby On Rails来搭建这样一个功能,或者是Java。</li>
 <li>PHP在我的服务器上运行得挺不错的,而且我又不需要重新去写配置那些配置。</li>
 <li>Laravel 可以简单的开发我们所需要的功能,换句话说他是 PHP 世界的 Ruby On Rails。</li>
 </ul>
 <p>这里不会再重述之前的问题,这里只是将需要的步骤一个个写下来,然后丢到这里好好说一下。至于RESTful是什么,前面已经介绍了,就不再重复了。那么下面,我们就用Laravel来搭建一个平台给物联网用的。</p>
-<h2 id="安装-laravel"><span class="header-section-number">12.2</span> 安装 Laravel</h2>
-<h3 id="gnulinux安装composer"><span class="header-section-number">12.2.1</span> GNU/Linux安装Composer</h3>
+<h2 id="安装-laravel"><span class="header-section-number">14.2</span> 安装 Laravel</h2>
+<h3 id="gnulinux安装composer"><span class="header-section-number">14.2.1</span> GNU/Linux安装Composer</h3>
 <p>GNU/Linux Ubuntu/OpenSUSE下可以执行</p>
 <pre><code>$ curl -sS https://getcomposer.org/installer | php</code></pre>
-<h4 id="windows安装composer"><span class="header-section-number">12.2.1.1</span> Windows安装Composer</h4>
+<h4 id="windows安装composer"><span class="header-section-number">14.2.1.1</span> Windows安装Composer</h4>
 <p>请直接下载</p>
 <p><a href="https://getcomposer.org/Composer-Setup.exe">Composer-Setup</a></p>
-<h4 id="mac-os"><span class="header-section-number">12.2.1.2</span> Mac OS</h4>
+<h4 id="mac-os"><span class="header-section-number">14.2.1.2</span> Mac OS</h4>
 <p>1.安装Composer</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">brew</span> install homebrew/php/composer</code></pre>
 <p>2.安装Laravel</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">composer</span> global require <span class="st">&quot;laravel/installer=~1.1&quot;</span></code></pre>
 <p>3.创建Laravel工程</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">composer</span> create-project laravel/laravel your-project-name --prefer-dist </code></pre>
-<h4 id="mac-os-1"><span class="header-section-number">12.2.1.3</span> Mac OS</h4>
+<h4 id="mac-os-1"><span class="header-section-number">14.2.1.3</span> Mac OS</h4>
 <p>1.下载laravel.phar</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">wget</span> http://laravel.com/laravel.phar</code></pre>
 <p>2.重命名</p>
@@ -1803,8 +1862,8 @@ Content-Type: application/json
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">sudo</span> mv laravel /usr/local/bin</code></pre>
 <p>4.创建项目</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">laravel</span> new blog</code></pre>
-<h2 id="mysql"><span class="header-section-number">12.3</span> MySQL</h2>
-<h3 id="安装mysql-1"><span class="header-section-number">12.3.1</span> 安装MySQL</h3>
+<h2 id="mysql"><span class="header-section-number">14.3</span> MySQL</h2>
+<h3 id="安装mysql-1"><span class="header-section-number">14.3.1</span> 安装MySQL</h3>
 <p><code>出于某些原因,我建议用MariaDB替换MySQL,如果你&quot;真正&quot;需要mysql,将mariadb替换为mysql</code></p>
 <p>ps: 在下文中我会继续用MySQL,而不是MariaDB,MairaDB是MySQL的一个分支,真正的开源分支。</p>
 <p>Ubuntu/Debian/Mint</p>
@@ -1815,7 +1874,7 @@ Content-Type: application/json
 <pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">sudo</span> zypper install mariadb-server</code></pre>
 <p>Mac OS</p>
 <pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">brew</span> install mariadb</code></pre>
-<h3 id="配置mysql"><span class="header-section-number">12.3.2</span> 配置MySQL</h3>
+<h3 id="配置mysql"><span class="header-section-number">14.3.2</span> 配置MySQL</h3>
 <p>修改database.php</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">app/config/database.php</span></code></pre>
 <p>要修改的就是这个</p>
@@ -1841,10 +1900,10 @@ Content-Type: application/json
 <span class="st">&quot;sensors2&quot;</span>: <span class="dv">12</span>,
 <span class="st">&quot;led1&quot;</span>: <span class="dv">0</span>
 }</code></pre>
-<h1 id="创建rest服务"><span class="header-section-number">13</span> 创建REST服务</h1>
-<h2 id="数据库迁移"><span class="header-section-number">13.1</span> 数据库迁移</h2>
+<h1 id="创建rest服务"><span class="header-section-number">15</span> 创建REST服务</h1>
+<h2 id="数据库迁移"><span class="header-section-number">15.1</span> 数据库迁移</h2>
 <p>这个名字是源自于Ruby On Rails在那时候的印象,不直接使用MySQL的目的在于让我们可以专注于过程。</p>
-<h3 id="创建表"><span class="header-section-number">13.1.1</span> 创建表</h3>
+<h3 id="创建表"><span class="header-section-number">15.1.1</span> 创建表</h3>
 <p>表的概念,类似于在Excel中的表,如果你真实不懂数据库。 让我们创建一个athomes的表,为什么是athomes,因为以前在写android程序的时候就叫的是athome,忽略掉这些次要的因素吧。</p>
 <pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">php</span> artisan migrate:make create_athomes_table</code></pre>
 <p>打开 app/database/migrations/<strong><em>create_athomes_table.php这里的</em></strong>是由日期和某些东西组成的,修改生成的代码为下面。</p>
@@ -1873,7 +1932,7 @@ Content-Type: application/json
 
 }</code></pre>
 <p>意思大致就是id是自加的,也就是我们在localhost/athome/{id},当我们创建一个新的数据的时候,会自动加上去,最后一个timestamps批的是时间,会包含创建时间和修改时间。 剩下的temperature,sensors1,sensors2是小数,以及只有真和假的led1。</p>
-<h3 id="数据库迁移-1"><span class="header-section-number">13.1.2</span> 数据库迁移</h3>
+<h3 id="数据库迁移-1"><span class="header-section-number">15.1.2</span> 数据库迁移</h3>
 <p>我们只是写了我们需要的数据的格式而并没有丢到数据库里,</p>
 <pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">php</span> artisan migrate</code></pre>
 <p>这个就是我们执行迁移的命令,如果你用phpmyadmin可以直接打开查看,没有的话,可以。</p>
@@ -1881,7 +1940,7 @@ Content-Type: application/json
 <pre class="sourceCode sql"><code class="sourceCode sql"><span class="kw">use</span> iot;
 <span class="kw">select</span> * <span class="kw">from</span> athomes;</code></pre>
 <p>就可以看到我们写的东西,那么接下来就是创建RESTful服务了</p>
-<h2 id="创建restful"><span class="header-section-number">13.2</span> 创建RESTful</h2>
+<h2 id="创建restful"><span class="header-section-number">15.2</span> 创建RESTful</h2>
 <p>用下面的代码实现我们称之为Athomes控制器的创建</p>
 <pre class="sourceCode bash"><code class="sourceCode bash">$ <span class="kw">php</span> artisan controller:make AthomesController  </code></pre>
 <p>就会在app/controllers下面生成下面的代码</p>
@@ -1916,7 +1975,7 @@ Content-Type: application/json
     }  
 
 }</code></pre>
-<h2 id="laravel-resources"><span class="header-section-number">13.3</span> Laravel Resources</h2>
+<h2 id="laravel-resources"><span class="header-section-number">15.3</span> Laravel Resources</h2>
 <p>上面的代码过于沉重,请让我用 Ctrl+C 来带来点知识吧。</p>
 <table>
 <thead>
@@ -2069,7 +2128,7 @@ Content-Type: application/json
 }</code></pre>
 <p>希望你能读懂,没有的话,继续。</p>
 <p>下面这部分来自于之前的博客,这里就不多加论述了。 这个也就是我们要的模板,</p>
-<h3 id="修改create"><span class="header-section-number">13.3.1</span> 修改Create()</h3>
+<h3 id="修改create"><span class="header-section-number">15.3.1</span> 修改Create()</h3>
 <pre class="sourceCode php"><code class="sourceCode php"><span class="kw">public</span> <span class="kw">function</span> create<span class="ot">()</span>
 {
     <span class="kw">$maxid</span>=Athomes::<span class="fu">max</span><span class="ot">(</span><span class="st">&#39;id&#39;</span><span class="ot">);</span>
@@ -2081,8 +2140,8 @@ Content-Type: application/json
     <span class="kw">return</span> View::make<span class="ot">(</span><span class="st">&#39;athome.create&#39;</span><span class="ot">);</span>
 }</code></pre>
 <p>这里只是对其中代码的进行一下说明。</p>
-<h3 id="创建表单"><span class="header-section-number">13.3.2</span> 创建表单</h3>
-<h4 id="创建表单之前"><span class="header-section-number">13.3.2.1</span> 创建表单之前</h4>
+<h3 id="创建表单"><span class="header-section-number">15.3.2</span> 创建表单</h3>
+<h4 id="创建表单之前"><span class="header-section-number">15.3.2.1</span> 创建表单之前</h4>
 <p>由于使用到了bootstrap以及bootstrap-select,记得添加css。</p>
 <pre class="sourceCode html"><code class="sourceCode html"><span class="kw">&lt;link</span><span class="ot"> rel=</span><span class="st">&quot;stylesheet&quot;</span><span class="ot"> type=</span><span class="st">&quot;text/css&quot;</span><span class="ot"> href=</span><span class="st">&quot;</span><span class="er">&lt;</span><span class="st">?= url(&#39;css/bootstrap.min.css&#39;) ?&gt;&quot;</span> <span class="kw">/&gt;</span>
 <span class="kw">&lt;link</span><span class="ot"> rel=</span><span class="st">&quot;stylesheet&quot;</span><span class="ot"> type=</span><span class="st">&quot;text/css&quot;</span><span class="ot"> href=</span><span class="st">&quot;</span><span class="er">&lt;</span><span class="st">?= url(&#39;css/bootstrap-select.min.css&#39;) ?&gt;&quot;</span> <span class="kw">/&gt;</span></code></pre>
@@ -2093,7 +2152,7 @@ Content-Type: application/json
 <span class="kw">&lt;script&gt;</span>
 <span class="fu">$</span>(<span class="st">&#39;.selectpicker&#39;</span>).<span class="fu">selectpicker</span>();
 &lt;<span class="ot">/script&gt;</span></code></pre>
-<h4 id="创建表单-1"><span class="header-section-number">13.3.2.2</span> 创建表单</h4>
+<h4 id="创建表单-1"><span class="header-section-number">15.3.2.2</span> 创建表单</h4>
 <p>这里用到的是之前提到的那个作者写下的,稍微修改了一下。</p>
 <pre class="sourceCode html"><code class="sourceCode html"><span class="kw">&lt;div</span><span class="ot"> class=</span><span class="st">&quot;row-fluid&quot;</span><span class="kw">&gt;</span>
   {{ HTML::ul($errors-&gt;all()) }}
@@ -2145,7 +2204,7 @@ Content-Type: application/json
         <span class="kw">return</span> Redirect::to<span class="ot">(</span><span class="st">&#39;athome&#39;</span><span class="ot">);</span>
     }
 }</code></pre>
-<h3 id="编辑模板"><span class="header-section-number">13.3.3</span> 编辑模板</h3>
+<h3 id="编辑模板"><span class="header-section-number">15.3.3</span> 编辑模板</h3>
 <p>完整的 blade 模板文件</p>
 <pre class="sourceCode html"><code class="sourceCode html"><span class="dt">&lt;!DOCTYPE </span>html lang=&quot;zh-cn&quot;<span class="dt">&gt;</span>
 <span class="kw">&lt;html&gt;</span>
@@ -2206,21 +2265,21 @@ Content-Type: application/json
 <img src="./images/edit.png" alt="Blade Edit" /><p class="caption">Blade Edit</p>
 </div>
 <p>最后效果见:<a href="http://b.phodal.com/" class="uri">http://b.phodal.com/</a></p>
-<h1 id="restful-evertywhere"><span class="header-section-number">14</span> RESTful Evertywhere</h1>
-<h2 id="javascript与ajax"><span class="header-section-number">14.1</span> Javascript与ajax</h2>
+<h1 id="restful-evertywhere"><span class="header-section-number">16</span> RESTful Evertywhere</h1>
+<h2 id="javascript与ajax"><span class="header-section-number">16.1</span> Javascript与ajax</h2>
 <blockquote>
 <p>AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。</p>
 </blockquote>
-<h3 id="jquery"><span class="header-section-number">14.1.1</span> jQuery</h3>
+<h3 id="jquery"><span class="header-section-number">16.1.1</span> jQuery</h3>
 <blockquote>
 <p>Jquery是继prototype之后又一个优秀的Javascript框架。它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+),jQuery2.0及后续版本将不再支持IE6/7/8浏览器。jQuery使用户能更方便地处理HTML(标准通用标记语言下的一个应用)、events、实现动画效果,并且方便地为网站提供AJAX交互。jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。jQuery能够使用户的html页面保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。</p>
 </blockquote>
-<h2 id="java与json"><span class="header-section-number">14.2</span> Java与json</h2>
+<h2 id="java与json"><span class="header-section-number">16.2</span> Java与json</h2>
 <blockquote>
 <p>Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象。</p>
 </blockquote>
-<h3 id="android"><span class="header-section-number">14.2.1</span> Android</h3>
-<h2 id="python与json"><span class="header-section-number">14.3</span> Python与json</h2>
+<h3 id="android"><span class="header-section-number">16.2.1</span> Android</h3>
+<h2 id="python与json"><span class="header-section-number">16.3</span> Python与json</h2>
 <blockquote>
 <p>使用pySerial可以使Python很好地在Windows/Linux/BSD上执行串口操作。</p>
 </blockquote>
@@ -2234,7 +2293,7 @@ url=<span class="st">&quot;http://b.phodal.com/athome/1&quot;</span>
 date=urllib2.urlopen(url)
 result=json.load(date)
    <span class="dt">print</span> result</code></pre>
-<h3 id="requests"><span class="header-section-number">14.3.1</span> requests</h3>
+<h3 id="requests"><span class="header-section-number">16.3.1</span> requests</h3>
 <blockquote>
 <p>Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 烂出翔来了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。</p>
 </blockquote>
@@ -2253,20 +2312,20 @@ url = <span class="st">&quot;http://b.phodal.com/athome/1&quot;</span>
 data = {<span class="st">&quot;temperature&quot;</span>: <span class="dv">19</span>, <span class="st">&quot;sensors1&quot;</span>: <span class="dv">32</span>, <span class="st">&quot;sensors2&quot;</span>: <span class="fl">7.5</span>, <span class="st">&quot;led1&quot;</span>: <span class="dv">0</span>, <span class="st">&quot;method&quot;</span>: <span class="st">&quot;PUT&quot;</span>}
 r = requests.put(url, data)
 <span class="dt">print</span> r.text</code></pre>
-<h1 id="前端显示"><span class="header-section-number">15</span> 前端显示</h1>
-<h2 id="库与车轮子"><span class="header-section-number">15.1</span> 库与车轮子</h2>
+<h1 id="前端显示"><span class="header-section-number">17</span> 前端显示</h1>
+<h2 id="库与车轮子"><span class="header-section-number">17.1</span> 库与车轮子</h2>
 <p>在多数的情况下我们都没有理由也没有必要去重新发明我们的车轮,在这时使用库会是一个比较好的做法。</p>
-<h2 id="库"><span class="header-section-number">15.2</span> 库</h2>
-<h3 id="jquery-mobile"><span class="header-section-number">15.2.1</span> jQuery Mobile</h3>
+<h2 id="库"><span class="header-section-number">17.2</span> 库</h2>
+<h3 id="jquery-mobile"><span class="header-section-number">17.2.1</span> jQuery Mobile</h3>
 <blockquote>
 <p>jQuery Mobile是jQuery 在手机上和平板设备上的版本。jQuery Mobile不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架。支持全球主流的移动平台。jQuery Mobile开发团队说:能开发这个项目,我们非常兴奋。移动Web太需要一个跨浏览器的框架,让开发人员开发出真正的移动Web网站。</p>
 </blockquote>
-<h3 id="bootstrap"><span class="header-section-number">15.2.2</span> Bootstrap</h3>
+<h3 id="bootstrap"><span class="header-section-number">17.2.2</span> Bootstrap</h3>
 <blockquote>
 <p>Bootstrap是Twitter推出的一个开源的用于前端开发的工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成。Bootstrap一经推出后颇受欢迎,一直是GitHub上的热门开源项目,包括NASA的MSNBC(微软全国广播公司)的Breaking News都使用了该项目。</p>
 </blockquote>
-<h2 id="网站前台显示"><span class="header-section-number">15.3</span> 网站前台显示</h2>
-<h3 id="highcharts"><span class="header-section-number">15.3.1</span> Highcharts</h3>
+<h2 id="网站前台显示"><span class="header-section-number">17.3</span> 网站前台显示</h2>
+<h3 id="highcharts"><span class="header-section-number">17.3.1</span> Highcharts</h3>
 <p>Highcharts有以下的特点</p>
 <ul>
 <li>兼容性:兼容当今所有的浏览器,包括 iPhone、IE 和火狐等等;</li>
@@ -2283,8 +2342,8 @@ r = requests.put(url, data)
 <div class="figure">
 <img src="./images/temperture.png" alt="Temperture" /><p class="caption">Temperture</p>
 </div>
-<h1 id="构建基于coap协议的物联网系统"><span class="header-section-number">16</span> 构建基于CoAP协议的物联网系统</h1>
-<h2 id="coap-嵌入式系统的rest"><span class="header-section-number">16.1</span> CoAP: 嵌入式系统的REST</h2>
+<h1 id="构建基于coap协议的物联网系统"><span class="header-section-number">18</span> 构建基于CoAP协议的物联网系统</h1>
+<h2 id="coap-嵌入式系统的rest"><span class="header-section-number">18.1</span> CoAP: 嵌入式系统的REST</h2>
 <p>引自维基百科上的介绍,用的是谷歌翻译。。。</p>
 <blockquote>
 <p>受约束的应用协议(COAP)是一种软件协议旨在以非常简单的电子设备,使他们能够在互联网上进行交互式通信中使用。它特别针对小型低功率传感器,开关,阀门和需要被控制或监督远程,通过标准的Internet网络类似的组件。 COAP是一个应用层协议,该协议是用于在资源受限的网络连接设备,例如无线传感器网络节点使用。 COAP被设计为容易地转换为HTTP与Web简化集成,同时也能满足特殊的要求,例如多播支持,非常低的开销,和简单性。多播,低开销,以及简单性是因特网极其重要物联网(IOT)和机器对机器(M2M)设备,这往往是积重难返,有太多的内存和电源,比传统的互联网设备有。因此,效率是非常重要的。 COAP可以在支持UDP或UDP的模拟大多数设备上运行。</p>
@@ -2296,17 +2355,17 @@ r = requests.put(url, data)
 <li>CoAP减少了一些HTTP的方法</li>
 <li>CoAP可以支持检测装置</li>
 </ul>
-<h2 id="coap-命令行工具"><span class="header-section-number">16.2</span> CoAP 命令行工具</h2>
+<h2 id="coap-命令行工具"><span class="header-section-number">18.2</span> CoAP 命令行工具</h2>
 <p>为了测试测试我们的代码是否是正确工作,我们需要一个CoAP的命令行工具。目前有两个不错的工具可以使用。</p>
 <ul>
 <li>CoAP-cli,一个基于NodeJS的CoAP命令行工具,其核心是基于Node-CoAP库。</li>
 <li>libcooap,一个用C写的CoAP命令行工具。</li>
 <li>FireFox Copper, 一个Firefox的插件。</li>
 </ul>
-<h3 id="node-coap-cli"><span class="header-section-number">16.2.1</span> Node CoAP CLI</h3>
+<h3 id="node-coap-cli"><span class="header-section-number">18.2.1</span> Node CoAP CLI</h3>
 <p>安装命令如下</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"> <span class="kw">npm</span> install coap-cli -g </code></pre>
-<h4 id="coap命令行"><span class="header-section-number">16.2.1.1</span> CoAP命令行</h4>
+<h4 id="coap命令行"><span class="header-section-number">18.2.1.1</span> CoAP命令行</h4>
 <p>在coap-cli中,一共有四个方法。分别表示REST的四种不同的方式:</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">Commands</span>:
 
@@ -2321,13 +2380,13 @@ r = requests.put(url, data)
 <p>测试一下现在的最小的物联网系统CoAP版</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">coap</span> get coap://iot-coap.phodal.com/id/1
 <span class="kw">(2.05)</span>  [{<span class="st">&quot;id&quot;</span>:<span class="kw">1</span>,<span class="st">&quot;value&quot;</span>:<span class="st">&quot;is id 1&quot;</span>,<span class="st">&quot;sensors1&quot;</span>:19,<span class="st">&quot;sensors2&quot;</span>:20}]</code></pre>
-<h3 id="libcoap"><span class="header-section-number">16.2.2</span> libcoap</h3>
-<h4 id="mac-os-libcoap安装"><span class="header-section-number">16.2.2.1</span> mac os libcoap安装</h4>
+<h3 id="libcoap"><span class="header-section-number">18.2.2</span> libcoap</h3>
+<h4 id="mac-os-libcoap安装"><span class="header-section-number">18.2.2.1</span> mac os libcoap安装</h4>
 <p>Mac OS下可以直接用</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">brew</span> install libcoap</code></pre>
-<h4 id="ubuntu-libcoap安装"><span class="header-section-number">16.2.2.2</span> Ubuntu libcoap安装</h4>
+<h4 id="ubuntu-libcoap安装"><span class="header-section-number">18.2.2.2</span> Ubuntu libcoap安装</h4>
 <p>Ubuntu GNU/Linux下</p>
-<h4 id="windows-libcoap安装"><span class="header-section-number">16.2.2.3</span> Windows libcoap安装</h4>
+<h4 id="windows-libcoap安装"><span class="header-section-number">18.2.2.3</span> Windows libcoap安装</h4>
 <p>Windows 下</p>
 <p>安装完libcoap,我们可以直接用自带的两个命令</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">coap-client</span> 
@@ -2340,13 +2399,13 @@ r = requests.put(url, data)
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">v</span>:1 t:0 tkl:0 c:1 id:37109
 <span class="kw">This</span> is a test server made with libcoap (see http://libcoap.sf.net) 
 <span class="kw">Copyright</span> (C) <span class="kw">2010--2013</span> Olaf Bergmann <span class="kw">&lt;</span>bergmann@tzi.org<span class="kw">&gt;</span></code></pre>
-<h3 id="firefox-copper"><span class="header-section-number">16.2.3</span> Firefox Copper</h3>
+<h3 id="firefox-copper"><span class="header-section-number">18.2.3</span> Firefox Copper</h3>
 <p>为了能访问<a href="coap://localhost/" class="uri">coap://localhost/</a>,于是我们便需要安装一个Firefox并安装一个名为Copper的插件。</p>
 <ol style="list-style-type: decimal">
 <li><p>下载地址: <a href="https://addons.mozilla.org/en-US/firefox/addon/copper-270430/" class="uri">https://addons.mozilla.org/en-US/firefox/addon/copper-270430/</a></p></li>
 <li><p>作为测试我们同样可以访问 <a href="coap://vs0.inf.ethz.ch:5683/" class="uri">coap://vs0.inf.ethz.ch:5683/</a></p></li>
 </ol>
-<h2 id="coap-helloworld"><span class="header-section-number">16.3</span> CoAP Hello,World</h2>
+<h2 id="coap-helloworld"><span class="header-section-number">18.3</span> CoAP Hello,World</h2>
 <p>接着我们便开始试试做一个简单的CoAP协议的应用:</p>
 <p>这里用到的是一个Nodejs的扩展Node-CoAP</p>
 <blockquote>
@@ -2388,8 +2447,8 @@ r = requests.put(url, data)
 <p>就可以在console上输出</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">Hello</span> World </code></pre>
 <p>也就达到了我们的目的,用CoAP协议创建一个服务,接着我们应该用它创建更多的东西,如产生JSON数据,以及RESTful。和HTTP版的最小物联网系统一样,CoAP版的最小物联网系统也是要返回JSON的。</p>
-<h2 id="coap-数据库查询"><span class="header-section-number">16.4</span> CoAP 数据库查询</h2>
-<h3 id="node-module"><span class="header-section-number">16.4.1</span> Node Module</h3>
+<h2 id="coap-数据库查询"><span class="header-section-number">18.4</span> CoAP 数据库查询</h2>
+<h3 id="node-module"><span class="header-section-number">18.4.1</span> Node Module</h3>
 <p>这说里NodeJS Module的意义是因为我们需要在别的地方引用到db_helper这个库,也就是下一小节要的讲的内容。</p>
 <p>这样我们就可以在server.js类似于这样去引用这个js库。</p>
 <pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> DBHelper = <span class="fu">require</span>(<span class="st">&#39;./db_helper.js&#39;</span>);
@@ -2399,7 +2458,7 @@ r = requests.put(url, data)
 }
 <span class="ot">DBHelper</span>.<span class="fu">initDB</span> = <span class="kw">function</span>(){};
 <span class="ot">module</span>.<span class="fu">exports</span> = DBHelper;</code></pre>
-<h3 id="node-sqlite3"><span class="header-section-number">16.4.2</span> Node-Sqlite3</h3>
+<h3 id="node-sqlite3"><span class="header-section-number">18.4.2</span> Node-Sqlite3</h3>
 <p>这次我们用的是SQLite3(你可以用MySQL,出于安全考虑用SQLite3,SQLite3产生的是一个文件)。一个简单的initDB函数</p>
 <pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> db = <span class="kw">new</span> <span class="ot">sqlite3</span>.<span class="fu">Database</span>(config[<span class="st">&quot;db_name&quot;</span>]);
 <span class="kw">var</span> create_table = <span class="st">&#39;create table if not exists basic (&#39;</span> + config[<span class="st">&quot;db_table&quot;</span>] + <span class="st">&#39;);&#39;</span>;
@@ -2432,7 +2491,7 @@ r = requests.put(url, data)
     });
 };</code></pre>
 <p>将URL传进来,便解析这个参数,接着再放到数据库中查询,再回调回结果。这样我们就可以构成之前所说的查询功能,而我们所谓的post功能似乎也可以用同样的方法加进去。</p>
-<h3 id="查询数据"><span class="header-section-number">16.4.3</span> 查询数据</h3>
+<h3 id="查询数据"><span class="header-section-number">18.4.3</span> 查询数据</h3>
 <p>简单地记录一下在IoT-CoAP中一次获取数据地过程。</p>
 <p>先看看在示例中的Get.js的代码,这关乎在后面server端的代码。</p>
 <pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">const</span> coap       = <span class="fu">require</span>(<span class="st">&#39;coap&#39;</span>)
@@ -2512,7 +2571,7 @@ r = requests.put(url, data)
 };</code></pre>
 <p>当resulst的结果为空时,返回一个404,因为没有数据。这样我们就构成了整个的链,再一步步返回结果。</p>
 <p>在<a href="https://github.com/phodal/iot-coap">IoT-CoAP</a>中我们使用到了一个Block2的东西,于是便整理相关的一些资料,作一个简单的介绍,以及在代码中的使用。</p>
-<h2 id="coap-block"><span class="header-section-number">16.5</span> CoAP Block</h2>
+<h2 id="coap-block"><span class="header-section-number">18.5</span> CoAP Block</h2>
 <p>CoAP是一个RESTful传输协议用于受限设备的节点和网络。基本的CoAP消息是一个不错的选择对于小型载荷如</p>
 <ul>
 <li>温度传感器</li>
@@ -2523,7 +2582,7 @@ r = requests.put(url, data)
 <p>CoAP是同UDP与DLTS一样是基于数据报传输的,这限制了资源表示(resource representation)的最大大小,使得传输不需要太多的分割。虽然UDP支持通过IP分片传输更大的有效载荷,且仅限于64KiB,更重要的是,并没有真正很好地约束应用和网络。</p>
 <p>而不是依赖于IP分片,这种规范基本COAP了对“块”选项,用于传输信息从多个资源区块的请求 - 响应对。在许多重要的情况下,阻止使服务器能够真正无状态:服务器可以处理每块分开传输,而无需建立连接以前的数据块传输的其他服务器端内存。</p>
 <p>综上所述,块(Block)选项提供了传送一个最小的在分块的方式更大的陈述。</p>
-<h3 id="coap-post"><span class="header-section-number">16.5.1</span> CoAP POST</h3>
+<h3 id="coap-post"><span class="header-section-number">18.5.1</span> CoAP POST</h3>
 <p>看看在IoT CoAP中的post示例。</p>
 <pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">const</span> coap     = <span class="fu">require</span>(<span class="st">&#39;coap&#39;</span>)
       ,request  = <span class="ot">coap</span>.<span class="fu">request</span>
@@ -2556,7 +2615,7 @@ r = requests.put(url, data)
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">[</span> <span class="st">&#39;1&#39;</span>, <span class="st">&#39;\&#39;</span>must<span class="dt">\&#39;</span><span class="st">&#39;, &#39;</span>23<span class="st">&#39;, &#39;</span>12<span class="st">&#39; ]</span></code></pre>
 <p>便可以很愉快地将其post到数据库中了,</p>
 <p>在做IoT-CoAP的过程中只支持JSON,查阅CoAP的草稿时发现支持了诸多的Content Types。</p>
-<h3 id="coap-content-types"><span class="header-section-number">16.5.2</span> CoAP Content Types</h3>
+<h3 id="coap-content-types"><span class="header-section-number">18.5.2</span> CoAP Content Types</h3>
 <p>以下文字来自谷歌翻译:</p>
 <blockquote>
 <p>互联网媒体类型是通过HTTP字符串标识,如“application/xml”。该字符串是由一个顶层的类型“applicaion”和子类型的“XML”。为了尽量减少使用这些类型的媒体类型来表示的开销消息有效载荷,COAP定义一个标识符编码方案互联网媒体类型的子集。预计这桌将可扩展标识符的值的IANA维护。内容类型选项被格式化为一个8位无符号整数。初始映射到一个合适的互联网媒体类型标识符表所示。复合型高层次类型(multipart和不支持消息)。标识符值是从201-255保留的特定于供应商的,应用程序特定的或实验使用和不由IANA。</p>
@@ -2729,7 +2788,7 @@ r = requests.put(url, data)
 </table>
 <p>简单地说就是:</p>
 <p><code>诸如application/json的Content Types在CoAP中应该是50</code>。如上表所示的结果是其对应的结果,这样的话可以减少传递的信息量。</p>
-<h2 id="coap-json"><span class="header-section-number">16.6</span> CoAP JSON</h2>
+<h2 id="coap-json"><span class="header-section-number">18.6</span> CoAP JSON</h2>
 <p>于是在一开始的时候首先支持的便是“application/json”这样的类型。</p>
 <p>首先判断请求的header</p>
 <pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">request_helper</span>.<span class="fu">getHandler</span> = <span class="kw">function</span>(req, res) {
@@ -2800,7 +2859,7 @@ r = requests.put(url, data)
     })
 }</code></pre>
 <p>并且全部都显示出来,设计得真是有点不行,不过现在已经差不多了。</p>
-<h2 id="使用iot-coap构建物联网"><span class="header-section-number">16.7</span> 使用IoT-CoAP构建物联网</h2>
+<h2 id="使用iot-coap构建物联网"><span class="header-section-number">18.7</span> 使用IoT-CoAP构建物联网</h2>
 <p><code>注意</code>:windows系统npm install失败时,需要自己建立一个C:and Settings[USERNAME]Data文件</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">npm</span> install iot-coap</code></pre>
 <p>new a file <code>index.js</code>(新建index.js)</p>
@@ -2852,12 +2911,12 @@ r = requests.put(url, data)
 <p>show:</p>
 <pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">coap</span> listening at coap://0.0.0.0:5683
 <span class="kw">restify</span> listening at http://0.0.0.0:8848</code></pre>
-<h1 id="mqtt"><span class="header-section-number">17</span> MQTT</h1>
+<h1 id="mqtt"><span class="header-section-number">19</span> MQTT</h1>
 <blockquote>
 <p>MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。</p>
 </blockquote>
 <p>早在1999年,IBM的Andy Stanford-Clark博士以及Arcom公司ArlenNipper博士发明了MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)技术[1] 。据Andy Stanford-Clark博士称,MQTT将在今年和明年呈现爆炸式增长。</p>
-<h2 id="nodejs-mqtt"><span class="header-section-number">17.1</span> Nodejs MQTT</h2>
+<h2 id="nodejs-mqtt"><span class="header-section-number">19.1</span> Nodejs MQTT</h2>
 <blockquote>
 <p><a href="https://github.com/adamvr/MQTT.js/">mqtt.js</a> is a library for the MQTT protocol, written in JavaScript to be used in node.js.</p>
 </blockquote>
@@ -2873,9 +2932,9 @@ client = <span class="ot">mqtt</span>.<span class="fu">createClient</span>(<span
 });
 
 <span class="ot">client</span>.<span class="fu">end</span>();</code></pre>
-<h1 id="尾声"><span class="header-section-number">18</span> 尾声</h1>
-<h2 id="路"><span class="header-section-number">18.1</span> 路</h2>
-<h2 id="其他-2"><span class="header-section-number">18.2</span> 其他</h2>
+<h1 id="尾声"><span class="header-section-number">20</span> 尾声</h1>
+<h2 id="路"><span class="header-section-number">20.1</span> 路</h2>
+<h2 id="其他-2"><span class="header-section-number">20.2</span> 其他</h2>
 <p>意见及建议: <a href="https://github.com/phodal/designiot/issues" class="uri">https://github.com/phodal/designiot/issues</a></p>
 <p>邮箱: <a href="h@phodal.com" class="uri">h@phodal.com</a></p>
 <div class="footnotes">

+ 5 - 0
src/1.8.rpi.md

@@ -1,5 +1,7 @@
 #Raspberry Pi
 
+![Raspberry Pi](./images/rpi.jpg)
+
 ##Geek的盛宴
 
 Raspberry Pi是一款针对电脑业余爱好者、教师、小学生以及小型企业等用户的迷你电脑,预装Linux系统,体积仅信用卡大小,搭载ARM架构处理器,运算性能和智能手机相仿。在接口方面,Raspberry Pi提供了可供键鼠使用的USB接口,此外还有千兆以太网接口、SD卡扩展接口以及1个HDMI高清视频输出接口,可与显示器或者TV相连。
@@ -50,3 +52,6 @@ Expand Filesystem              Ensures that all of the SD card s
 
 ![GPIO](./images/gpio.png)
 
+##Raspberry Pi
+
+

+ 16 - 0
src/1.9.server.md

@@ -0,0 +1,16 @@
+
+#Server
+
+##服务器
+
+服务器(Server)指:
+ 
+ - 一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器(能使用户在其它计算机访问文件),数据库服务器和应用程序服务器。
+
+ - 运行以上软件的计算机,或称为网络主机(Host)。
+
+ - 一般来说,服务器通过网络对外提供服务。可以通过Intranet对内网提供服务,也可以通过Internet对外提供服务。
+
+##Web服务器
+
+WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。 WWW 是 Internet的多媒体信息查询工具,是 Internet 上近年才发展起来的服务,也是发展最快和目前用的最广泛的服务。正是因为有了WWW工具,才使得近年来 Internet 迅速发展,且用户数量飞速增长。

+ 16 - 0
src/2.0.webservices.md

@@ -0,0 +1,16 @@
+#Web服务
+
+Web服务是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。
+
+根据W3C的定义,Web服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作。网络服务通常是许多应用程序接口(API)所组成的,它们透过网络,例如国际互联网(Internet)的远程服务器端,执行客户所提交服务的请求。
+
+尽管W3C的定义涵盖诸多相异且无法介分的系统,不过通常我们指有关于主从式架构(Client-server)之间根据SOAP协议进行传递XML格式消息。无论定义还是实现,WEB服务过程中会由服务器提供一个机器可读的描述(通常基于WSDL)以辨识服务器所提供的WEB服务。另外,虽然WSDL不是SOAP服务端点的必要条件,但目前基于Java的主流WEB服务开发框架往往需要WSDL实现客户端的源代码生成。一些工业标准化组织,比如WS-I,就在WEB服务定义中强制包含SOAP和WSDL。
+
+WEB服务实际上是一组工具,并有多种不同的方法调用之。三种最普遍的手段是:
+
+ - 远程过程调用(RPC)
+ - 面向服务架构(SOA)
+ - 表述性状态转移(REST)。
+
+
+##SOAP VS RESTful

+ 7 - 0
src/2.1.restful.md

@@ -7,3 +7,10 @@
 ###资源
 
 互联网上的一切信息都可以看作是一种资源。
+
+HTTP Method | Operation Performed 
+------------|---------------------
+GET         | Get a resource (Read a resource)
+POST        | Create a resource
+PUT         | Update a resource
+DELETE      | Delete Resource