澳门美高梅手机网站以 Ubuntu16.04臻安并使用Docker

序言:最近点滴年生猛的大网框架Retrofit,使用它们的时候,查看文档会告诉你,要求后台的服务器哥们要符合REST规范被你计划接口,作为安卓开发工程师来说,我就可怜想得到了,REST规范到底是甚?本着极客精神,我虽翻开了材料,写了如此一首文章,如果起邪的地方,欢迎提意见。

介绍

Docker是一个绽放源代码软件类,让应用程序布署在软件容器下的做事得以自动化进行,借这于Linux操作系统及,提供一个附加的软件抽象层,以及操作系统层虚拟化的电动管理机制[\[1\]](https://zh.wikipedia.org/wiki/Docker_(%E8%BB%9F%E9%AB%94)#cite_note-SYS-CON_Media-1)。Docker利用Linux核心受到的资源分脱机制,例如cgroups,以及Linux核心名空间(name
space),来创造独立的软件容器(containers)。这好当单一Linux实体下运作,避免引导一个虚拟机招的额外负担[\[2\]](https://zh.wikipedia.org/wiki/Docker_(%E8%BB%9F%E9%AB%94)#cite_note-2)。Linux核心对名字空间的支撑了隔离了工作环境遭受应用程序的视野,包括进程树、网络、用户ID与挂载文件系统,而基本之cgroup提供资源隔离,包括CPU、内存、block

一、理解RESTful架构

越是多之总人口初步意识及,网站就软件,而且是平等种植时的软件。
  这种”互联网软件”采用客户端/服务器模式,建立于分布式体系上,通过互联网通信,具有高延时(high
latency)、高并发等特色。
  网站开发,完全可以使软件开发的模式。但是传统上,软件及网是个别个例外之小圈子,很少发混合;软件开发主要针对单机环境,网络则主要研究体系间的通信。互联网的勃兴,使得这简单个世界开始融合,**
现在咱们得考虑,如何开发以互联网环境遭受动用的软件。**

RESTful架构,就是当下最盛行的同种植互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以刚刚获得更为多网站的施用。
  但是,到底什么是RESTful架构,并无是一个容易说明白的题材。下面,我就是讨论自己清楚的RESTful架构。

一、起源

REST这个词,是Roy Thomas
Fielding在他2000年的博士论文遭遇提出的。

  Fielding是一个生主要之人头,他是HTTP协议(1.0本及1.1本)的主要设计者、Apache服务器软件的撰稿人之一、Apache基金会的首先管主持人。所以,他的即刻篇论文而见报,就挑起了关心,并且就对互联网支付出了源远流长的熏陶。
  他这么介绍论文的编著目的:

正文研究计算机是两分外前沿—-软件以及网络—-的交叉点。长期以来,软件研究重大关心软件设计的分类、设计方的演化,很少客观地评估不同的规划选择针对性系统作为之影响。而互相反地,网络研究主要关心系统之间通信行为之底细、如何改善特定通信机制的呈现,常常忽视了一个真相,那就是转应用程序的并行风格比较改变互动协议,对整体呈现有再要命的熏陶。自我当即首文章的作文目的,就是想当符合架构原理的前提下,理解和评估因为网也底蕴的利用软件的架构设计,得到一个成效强、性能好、适宜通信的架。

二、名称

Fielding将他针对互联网软件的架原则,定名为REST,即Representational
State Transfer的缩写。我对是短语的翻译是”表现层状态转化”。

要一个架符合REST原则,就如她呢RESTful架构。

苟知道RESTful架构,最好之主意就是是失去解Representational State
Transfer这个短语到底是呀意思,它的各个一个词代表了哟涵义。
若果你把此称呼来明白了,也就非难体会REST是一致种何等的计划性。

三、资源(Resources)

REST的名称”表现层状态转化”中,省略了主语。”表现层”其实指的是”资源”(Resources)的”表现层”。

所谓”资源”,就是网络及的一个实体,或者说是网络直达之一个现实信息。它们可是一律段子文本、一摆放图、一首歌、一种服务,总之就是是一个切实的实际。你可为此一个URI(统一资源定位符)指于它们,每种资源对应一个特定的URI。要博取之资源,访问它的URI就可以,因此URI就成为了各一个资源的地址或独一无二的识别符。

所谓”上网”,就是暨互联网上同一文山会海的”资源”互动,调用它的URI。

四、表现层(Representation)

“资源”是一律种信息实体,它好出多种外在表现形式。咱俩拿”资源”具体表现出的样式,叫做它的”表现层”(Representation)。

依照,文本可以用txt格式表现,也足以用HTML格式、XML格式、JSON格式表现,甚至足以使二上前制格式;图片可以为此JPG格式表现,也堪为此PNG格式表现。

URI只表示资源的实业,不意味着它的花样。严格地游说,有些网址最后之”.html”后缀名是匪必要的,因为此后缀名表示格式,属于”表现层”范畴,而URI应该只代表”资源”的职。它的具体表现形式,应该于HTTP请求的峰信息中用Accept和Content-Type字段指定,这点儿个字段才是指向”表现层”的叙述。

五、状态转化(State Transfer)

访一个网站,就意味着了客户端与服务器的一个互为过程。在这个历程遭到,势必涉及到数码及状态的转移。

互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都封存在劳务器端。因此,倘客户端想使操作服务器,必须经某种手段,让服务器端发生”状态转化”(State
Transfer)。而这种转化是成立以表现层以上的,所以就是是”表现层状态转化”。

客户端用到之手段,只能是HTTP协议。具体来说,就是HTTP协议里,四独代表操作方式的动词:GET、POST、PUT、DELETE。它们分别针对许季种基本操作:GET用来取资源,POST用来新建资源(也堪用于更新资源),PUT用来更新资源,DELETE用来删除资源。

六、综述

概括上面的说明,我们总一下呀是RESTful架构:
    (1)每一个URI代表一律种植资源;
    (2)客户端和服务器之间,传递这种资源的某种表现层;
    (3)客户端通过四独HTTP动词,对劳务器端资源进行操作,实现”表现层状态转化”。

七、误区

RESTful架构有一些突出的计划性误区。
  极端普遍的相同种设计不当,就是URI包含动词。以”资源”表示同样种实体,所以应是名词,URI不该出动词,动词应该在HTTP协议被。
  举例来说,某个URI是/posts/show/1,其中show是动词,这个URI就筹划错了,正确的写法应该是/posts/1,然后据此GET方法表示show。
  如果某些动作是HTTP动词表示不了的,你就是相应把动作做成一种资源。比如网上汇款,从账户1为账户2汇500正,错误的URI是:

POST /accounts/1/transfer/500/to/2

对的写法是管动词transfer改成为名词transaction,资源不能够是动词,但是可是平等种服务:

POST /transaction HTTP/1.1
Host: 127.0.0.1
from=1&to=2&amount=500.00

外一个计划误区,就是当URI中参加版本号

http://www.example.com/app/1.0/foo
http://www.example.com/app/1.1/foo
http://www.example.com/app/2.0/foo

为不同之本子,可以理解成同一种植资源的不同表现形式,所以应运用与一个URI。版本号可以以HTTP请求头信息的Accept字段受到进行分(参见Versioning
REST
Services):

Accept: vnd.example-com.foo+json; version=1.0
Accept: vnd.example-com.foo+json; version=1.1
Accept: vnd.example-com.foo+json; version=2.0

I/O以及网。从0.9本以于,Dockers在用抽象虚拟是经libvirt的 LXC与systemd

nspawn提供界面的基础及,开始席卷libcontainer库做吗以友好之主意初步一直利用由Linux核心提供的虚拟化的设备,

据悉行业分析企业“451切磋”:“Dockers是来能力打包应用程序及其虚拟容器,可以于任何Linux服务器上运行的依工具,这促进实现灵活性与便携性,应用程序在另外地方都得运行,无论是公有云、私有云、单机等。”


 

老二、RESTful API 设计指南

网络应用程序,分为前端和后端两单部分。当前底发展趋势,就是前者设备层出不穷(手机、平板、桌面电脑、其他专用设备……)。
  因此,必须有相同种植统一的建制,方便不同之前端设备及后端进行通信。这招API构架的风靡,甚至出现”API
First”的规划思想。RESTful
API凡眼前较成熟的一样模拟互联网应用程序的API设计理论。我先写过相同首《理解RESTful架构》,探讨如何了解这个概念。
  今天,我将介绍RESTful
API的统筹细节,探讨如何统筹相同效合理、好用之API。我之重要参照了个别首文章(1,2)。

RESTful API

一、协议

API与用户之通信协议,总是利用HTTPs协议。

二、域名

应该尽可能将API部署于专用域名之下。

    https://api.example.com

假使确定API很简短,不会见有愈来愈扩大,可以设想在主域名下。

     https://example.org/api/

三、版本(Versioning)

相应用API的版本号放入URL。

  https://api.example.com/v1/

外一样栽做法是,将版本号放在HTTP头信息遭受,但不若放入URL方便与直观。Github以这种做法。

四、路径(Endpoint)

路线而如”终点”(endpoint),表示API的现实网址。

当RESTful架构中,每个网址代表同样种资源(resource),所以网址中不能够出动词,只能有名词,而且所用之名词往往和数据库的表格名对应。一般的话,数据库中的表都是同种记录的”集合”(collection),所以API中之名词也应当运用复数。

举例来说来说,有一个API提供动物园(zoo)的音,还连各种动物与雇员的音信,则它的路线应该设计成下面这样。

https://api.example.com/v1/zoos
https://api.example.com/v1/animals
https://api.example.com/v1/employees

五、HTTP动词

对于资源的具体操作类型,由HTTP动词表示。
常用的HTTP动词有下面五个(括号里是对应之SQL命令)。

GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
DELETE(DELETE):从服务器删除资源。

还有少只非常用之HTTP动词。

HEAD:获取资源的元数据。
OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

脚是一对例子。

GET /zoos:列出所有动物园
POST /zoos:新建一个动物园
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/ID:删除某个动物园
GET /zoos/ID/animals:列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物

六、过滤信息(Filtering)

要记录数据过剩,服务器无可能都拿其返回给用户。API应该提供参数,过滤返回结果。
脚是局部泛的参数。

?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第几页,以及每页的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件

参数的计划允许有冗余,即许API路径和URL参数偶尔发生重新。比如,GET
/zoo/ID/animals 同 GET /animals?zoo_id=ID 的义是一样的。

七、状态码(Status Codes)

服务器向用户返回的状态码和提示信息,常见的产生以下一些(方括号被是该状态码对应的HTTP动词)。

200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

状态码的毕列表参见这里。

八、错误处理(Error handling)

假定状态码是4xx,就该往用户返回出错信息。一般的话,返回的音中将error作为键名,出错信息作键值即可。

{
error: “Invalid API key”
}

九、返回结果

对不同操作,服务器向用户返回的结果应当抱以下标准。

GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新生成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回一个空文档

十、Hypermedia API

RESTful
API最好成功Hypermedia,即返结果中提供链接,连为其他API方法,使得用户不查看文档,也懂下一致步该做什么。
  比如,当用户为api.example.com的绝望目录发出请求,会拿走这样一个文档。

{"link": { 
  "rel":   "collection https://www.example.com/zoos",
  "href":  "https://api.example.com/zoos",
  "title": "List of zoos",
  "type":  "application/vnd.yourformat+json"
}}

方代码表示,文档中有一个link属性,用户读取这个特性就明白下一致步该调用什么API了。rel表示此API与眼前网址的关联(collection关系,并受有拖欠collection的网址),href表示API的门径,title表示API的标题,type表示回去路。
  Hypermedia
API的筹划被称作HATEOAS。Github的API就是这种计划,访问api.github.com会得到一个怀有可用API的网址列表。

{
  "current_user_url": "https://api.github.com/user",
  "authorizations_url": "https://api.github.com/authorizations",
  // ...
}

从者可以看出,如果想取得当前用户的信,应该去顾api.github.com/user,然后便得了底结果。

  {
    "message": "Requires authentication",
    "documentation_url": "https://developer.github.com/v3"
}

点代码表示,服务器被起了提示信息,以及文档的网址。

十一、其他

(1)API的位置证明应下OAuth
2.0框架。
(2)服务器返回的数据格式,应该尽可能利用JSON,避免采用XML。
(完)


**
原文:http://www.ruanyifeng.com/blog/2014/05/restful\_api.html\*\*

安装必要条件

64员之系

得利用sudo的用户


 安装

先是步:设置包管理器仓库

在Ubuntu上设置Docker仓库。 lsb_release -cs 可以显示你的 Ubuntu
版本,比如 xenial 或者 trusty。

安完成后,更新包管理器。

sudo  apt-get -y install apt-transport-https ca-certificates
curl  -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 
sudo apt-get install software-properties-common 
sudo  add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get udate

第二步:安装Docker

sudo apt-get -y install docker-ce

第三步:测试

sudo docker run hello-world

第四部:无需sudo执行Docker命令(非必要)

sudo usermod -aG docker '你的用户名'

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注