为现有的网站开发App版,该怎么办?
时间:2023-11-24 12:12:01 | 来源:网站运营
时间:2023-11-24 12:12:01 来源:网站运营
为现有的网站开发App版,该怎么办?:首先先绕题一下,互联网时代大部分应用软件/产品都是基于“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 接口对应于话题...
…