为现有的网站开发App版,该咋办

提炼主要功能;做几个界面,包括登录、列表、详情等等;web端改造一下,支持json或者xml输出;客户端把读到的xml/json填进去。然后再美化一下。
■网友
首先先绕题一下,互联网时代大部分应用软件/产品都是基于“Client/Server”(C/S)或是“Browser/Server”(B/S)的架构,最早的PC时代网络应用主要是C/S的架构,而在Web流行之后,B/S架构是一度成为风靡。事实上B/S的架构是C/S架构的一个特例,因为Browser可以视为一种特殊的Client。而如今的移动时代,似乎又回归C/S的架构。即使这两种架构有不小的差异,但是本质上是相同/想通的。回到网站上来说,假设这个网站叫OnlineSchool吧(最近网络学习特别火),它是个B/S架构,它的通信方式为Browser发一个HTTP请求给Server,Server收到HTTP请求(通过URL地址)后进行处理,然后将结果以HTTP响应(HTML文档)的方式返回给Browser,后者再对HTML文档进行渲染,这个过程被视为一次独立的HTTP通信。App (Client的一种特例) 与 网站的 Server 的工作原理也是类似的 -- App 发送一个 HTTP 请求给 AgapeWS Server,Server 收到 HTTP 请求(GET, POST, PATCH, DELETE等HTTP动词)后进行处理,然后将结果以HTTP响应(响应的报文包含一个半结构化数据模型,通常为 JSON / XML 格式的文档)的方式返回给App,Client 处理这个 JSON 文档然后显示数据。所以需要做的工作如下:1. 开发一组 APIs(通常不需要网站的数据库),App 借着这组 API 与 网站的 Server 进行HTTP通信。2. 开发 App。我举个具体的实例(Ruby China社区网站)来说明以上的原理。Ruby China社区网站是一个讨论Ruby相关技术的论坛(Forum),整个网站主要是由许许多多的帖子,或是称为话题(Topic)组成。浏览器展示某个话题,需要将URL转换为HTTP请求,比如Browser通过 Ruby China | Ruby 中那些你绕不过的「坑」(译) 这个 URL 给 Ruby China的Server 发送 HTTP 请求,然后会收到一个 HTML 网页。此外这个网站还提供一个 http://ruby-china.org/api/topics/17742.json(若浏览器显示乱码,请设置为UTF-8格式),iOS/Android App 可以通过这个具体的 API 得到一个 JSON 格式的响应。我摘取该JSON响应的一部分:{ "id": 17742, "title": "Ruby 中那些你绕不过的「坑」(译)", "created_at": "2014-03-08T15:51:27.447+08:00", "updated_at": "2014-03-14T19:54:35.745+08:00", "replied_at": "2014-03-14T19:54:35+08:00", "replies_count": 56, "node_name": "Ruby", "node_id": 1, "last_reply_user_id": 11729, "last_reply_user_login": "chaishao", "body": " 大多数 Ruby on Rails 的初学者们都会为这个出色的框架着迷,…" "hits": 3264, "user": { "id": 835, "login": "zhaowenchina", },}移动 App 通过此 JSON 数据来显示界面。Ruby China网站提供了一组 API:Ruby China 来支持与 Clients 的通信,事实上Ruby China的 Server 并不需要知道 Client 具体的细节,因为 Android 或是 iOS Client 都是通过相同的 Ruby China API 接口来通信。现在具体谈谈这组 API 如何设计,假设这个网站域名为http://onlineschool.com来着,猜测需要的大致如下:1. User 接口,这个接口支持的操作如注册、登录、登出等操作。这个接口的API可以设计为 http://onlineschool.com/api/user当 Client 需要获取某个用户的信息(ID 为 10010),那么可以对http://onlineschool.com/api/user/10010.json 地址使用 HTTP GET 请求,OnlineSchool Server发送回来的响应可能如下:{ "id": "10010", "username": "张三" "last_login_time": "2012-01-01" "credits": 14 "num_finished_classes": 8 ...}当 App 需要更新这个用户的信息,比如修改用户名,Client 可以对接口http://onlineschool.com/api/user/10010 发送HTTP PATCH请求,请求中会有参数 username = "李四" 这样的 Key / Value 对,来告诉Online Server修改该用户的信息,Server接收到这个请求后一般会修改数据库中用户的表(Table),当然 App 并不需要知道Server到底是怎么做的,也并不需要关心,只要知道这个 API 协定的规则就够了。类似,如果删除一个用户,App 可以对接口http://onelineschool.com/api/user/10010 发送HTTP DELETE请求……2. Class 接口,这个接口提供与课程相关的操作,读取一个课程的信息,读取一组课程的信息,等..,http://onlineschool.com/api/class获取所有课程,一般通过发送HTTP GET到这个接口 http://onlineschool.com/api/class;如果获取某一个ID为234的课程,可以发送 HTTP GET 到这个接口 http://onlineschool.com/api/class/234,等等…3. Topic 接口对应于话题...…


推荐阅读