在PaaS上开发Web、移动应用(2)

摘要:
“a”}-http:name=bHeader:[{'id':'b'}]PUT更新资源(不可缓存)-http://example.com/users/123Header:“x”}响应:“y”}]响应:{“id”:“name”:11。胖Web客户端,如SproutCore(http://www.Cappucinoproject.org)可以用作数据绑定的构建块:

在PaaS上开发Web、移动应用(2)

PaaS学习笔记目录

PaaS基础学习(1)

在PaaS上开发Web、移动应用(2)

PaaS优点与限制(3)

6. 巨型代码,是指持续不断地向一个应用程序添加功能,不停地增加新的特性如搜索功能、账户管理、博客发布等。

在开发速度以及在适应扩展需求的总体架构之间进行权衡。

  • 新技术的面向服务架构(SOA)在Web应用的复兴
  • 标准技术(例如REST)也让服务更统一和易维护。

7. JSON

JSON(JavaScript Object Notation)是作为在API服务内部传输数据的标准出现的,它可作为替换XML的备选方案之一。
如:
{
“id”:1,
“name”:”Programming for PaaS”,
“price”:123,
“tags”:[“PaaS”,”Programming”]
}

8. REST(表述性状态转移)

REST(Representational State Transfer)是诸如Web应用之类的分布式系统的一种架构模式。
- 通过复用HTTP的基础操作,如GET、POST、PUT以及DELETE,REST已经成为了一种主流服务设计模型。
- REST背后的原则的基本原则就是通过提供一个共享的网络词汇,以一种标准的、可预测的格式来传输资源。
如:一个基于REST的用于管理用户数据的JSON服务:

GET

列出资源(可以被缓存)
- http://example.com/users
Header:
  none
Response:
[
  {'id':123,
  'name':'a'},
  {'id':124,
  'name':'b'}
]
- http://example.com/users/123
Header:
  none
Response:
{'id':123,
'name':'a'}
- http://example.com/users?name=b
Header:
  none
Response:
[
{'id':124,
'name':'b'}
]

PUT
更新资源(不可缓存)

- http://example.com/users
Header:
[
{'id':123,
'name':'x'},
{'id':124,
'name':'y'}
]
Response:
  200 OK
- http://example.com/users/123
Header:
  {'id':123,
  'name':'x'}
Response:
  200 OK
- http://example.com/users?name=b
Header:
[
{'id':124,
'name':'y'}
]
Response:
  200 OK

POST
创建新资源(不可缓存)

- http://example.com/users
Header:
{'id':125,
'name':'c'}
Response:
  200 OK
-http://example.com/users/123
  Not used
-http://example.com/users?name=b
  创建新资源的时候不需要查询字符串

DELETE
  删除资源(不可缓存)
- http://example.com/users
Header:
  None
Response:
  200 OK
Note:
  Deleted all users
-http://example.com/users/123
Header:
  None
Response:
  200 OK
Note:
  Deleted only user 123
- http://example.com/users?nmae=b
Header:
  None
Response:
  200 OK
Note:
  Deleted all users named b

9. 元服务

元服务是一种基于REST的应用程序,用于为数据的集合提供服务。

10. 瘦Web客户端

元服务可以直接在浏览器中调用。

11. 胖Web客户端

诸如SproutCore(http://SproutCore.com)和Cappucino(http://www.Cappucinoproject.org)可以作为数据绑定的构建模块。
SproutCore和Cappucino为我们提供了构建模块,通过一种非常标准的方法将这些基础元素组合在一起,就可以构建现代应用程序。
这些应用无论在Web还是移动客户端都让人感觉到类似桌面应用的效果。

12. 移动客户端的PaaS

iOS

REST的框架:RestKit

Android

采用Java语言的Android本地应用也可以简单快速地访问元服务以及获取数据。
- 自己动手构建,采用Android的异步网络操作
1. 将AsyncTask类扩展为异步任务类
2. 创建一个URLConnection并且将数据转换为字符串
3. 将结果处理为Java对象
Java实例代码:

//通过新的GetRESTData().excute()在一个服务中执行;
private class GetRESTData extends AsyncTask <Void,Void,String>{

  @Override
  protected String doInBackground(Void... params){
    URL url = new URL("http://example.com/users");

    URLConnection urlConnection = url.openConnection();
    InputStream in = new
      BufferedInputStream(urlConnection.getInputStream());
    BufferedReader reader = new
      BufferedReader(new InputStreamReader(in));
    String result,line = reader.readLine();
    result = line;
    while((line = reader.readLine())!=null){
      result += line;
    }
    in.close();

    return result;
  }

  protected void onPostExecute(String restResult){
    //process the JSON string into Java object
    //and persist it into a SQLite database
  }
}
  • 使用开源或者专有的框架

Android上的REST框架:Restlet
Restlet可以从基于REST的源获取数据时,极大地节省开发者的时间和精力。
RestLet的简单实例:

public interface UserResource{
  @Get
  public User retrieve();

  @Put
  public void store(User user)

  @Delete
  public void remove();
}

ClientResource cr = new ClientResource("http://example.com/users/123");
//获取用户对象
UserResource resource = cr.wrap(UserResource.class);
User user = resource.retrieve();

免责声明:文章转载自《在PaaS上开发Web、移动应用(2)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Shell脚本调试技术android用OkHttp和okio包通信的坑气死我了下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【spring】spring源码阅读之xml读取、bean注入(BeanFactory)

前言   此源码其实是在4月中旬就看了,而且当初也写了一份word文档,但不打算直接把word发上来。还是跟着以前的笔记、跟踪代码边看边写吧。   其实当初看源码的理由很简单,1、才进新公司,比较有空闲。2、面试老是问spring的问题,我理论又不好,所以想看下。   但现在,我重新看的目的其实不在于其实现原理,而是想学习和写出好的编码风格。(当初大概花了...

php生成excel的另一种简单方法

之前我用table的方式写过excel,还用php-excel这个类库写过excel。今天,我再向大家推荐一个超级简单的写excel的方法。 代码: $xstr = "问题id 问题内容 问题回答数 问题发布时间 回答id 回答时间 回答距离问题发布 ";$xstr .= "{$askid} {$askTit} {$z_reply} {$z_asktf}...

selenium+python之iframe学习笔记

一、查看iframe,判断元素是否在iframe上 1.Top Window 如果此处显示的是Top Window,表明元素在首页,不需要切换iframe 2.iframe 如果此处显示是iframe,则需要切换,driver.switch_to.frame() 注意:当此处为空白时,表明有2层iframe  二、切换iframe,可以通过id,nam...

mysql 分类表设计

无限级分类表设计 作用: 可以实现在一张表中完成多层级分类,而无需分多个分类表逐一创建。 附上实例图: 理解点: 1.parent_id 的作用 2.如何查询表 parent_id 注意: 以下一级、二级分类都是在上面一张表实现的! 1.假设我有两个一级分类为:衣服 裤子 2. 请问他们的parent_id 应该为多少? 答: 应该为0,一级是顶级分类...

下载Tomcat时Tomcat网站上的core和deployer的区别

下载Tomcat时Tomcat网站上的core和deployer的区别  做JavaEE开发的朋友,无论是学习者还是已经工作的朋友,总是会用到Tomcat这个Servlet容器,那么大家从Tomcat官网上去下载tomcat的时候总会看到下载列表中有如下内容(下面以下载6.0.43版为例): 6.0.43 Please see the README fil...

MongoDB update数据语法

在前面的文章“mongodb 查询的语法”里,我介绍了Mongodb的常用查询语法,Mongodb的update操作也有点复杂,我结合自己的使用经验,在这里介绍一下,给用mongodb的朋友看看,也方便以后自己用到的时候查阅:注:在这篇文章及上篇文章内讲的语法介绍都是在mongodb shell环境内的,和真正运用语言编程(如java,php等)使用时,在...