简介

  • “Web服务”是一个通用术语,指任何可以通过HTTP访问的应用程序编程界面(API); 我们的重点是提供“REST风格”的服务,与其交互要更直接得多。
  • REST表示“表述性状态传输”(Representational State Transfer), REST的正规描述很复杂,需要计算机科学形式上的表述,但REST基本上就是客户端和服务器端的无状态连接。
  • REST的正式定义还指出服务可以被缓存,可以被分层(即当你使用一个REST API时,可能还有其他REST API在它下面)。
  • 从实用角度来看,因为HTTP的限制,实际上很难创建出非REST风格的API;

JSON和XML

  • 提供API的关键是有相通的语言;通信部分已经决定了,必须用HTTP方法跟服务器通信。但在那之后,我们可以用任何数据语言。
  • 传统上XML是非常流行的选择,并且是很重要的标记语言。
  • 尽管XML不是特别复杂,但Douglas Crockford觉得还可以做得更轻量,因此JavaScript对象标记(JSON)诞生了。
  • 除了对JavaScript非常友善(但它绝不是专有的,它是任何语言都可以解析的简单格式),它还有个优势,即一般手写起来也比XML更容易。

我们的API

  • 在实现之前,我们会先把API规划好。

    • GET /api/attractions: 获取景点。以latlngradius为查询字符串参数,返回一个景点列表。
    • GET /api/attraction/:id: 根据ID返回一处景点。
    • POST /api/attraction: 以latlngnamedescriptionemail为请求体添加新的景点。新添加的景点会进入一个待审批队列。
    • PUT /api/attraction/:id: 更新一处已有的景点。参数为景点的IDlatlngnamedescriptionemail。更新会进入待审批队列。
    • DEL /api/attraction/:id: 删除景点。参数为景点IDemailreason。删除会进入待审批队列。
  • 可以有很多描述API的方式。这里选择用HTTP方法和路径的组合来区分API调用,并用查询字符串和请求主体参数混合的方式传递数据。
  • 作为选择,可以用方法全都相同的不同路径(比如/api/attractions/delete);也可以用同一种方式传递数据。比如可以选择在URL中用查询参数而不是查询字符串传递所有必需的信:GET/api/attractions/:lat/:lng/:radius
  • 为了避免出现超长的URL,建议用请求主体传递大块数据。
  • POST用于创建而PUT用于更新(或修改),这已经成为标准了。

API错误报告

  • HTTP API的错误报告一般是通过HTTP状态码实现的:
  • 如果返回的响应码是200(OK),则客户端知道请求成功了;
  • 如果响应码是500(服务器内部错误),则请求失败了。
  • 然而在大多数应用程序中,并不是所有事情都可以(或者应该)粗略地划分成“成功”或“失败”。比如说,用ID请求某件东西,但如果那个ID不存在怎么办?这不是服务器错误:客户端请求了不存在的东西。
  • 一般来说,错误可以分为以下几类:

express-20 REST API和JSON的更多相关文章

  1. Web3.js 0.20.x API 中文版翻译

    文档原始链接为:https://web3.learnblockchain.cn/0.2x.x/,欢迎大家前往查阅,本文只是节选开头部分的介绍及API列表索引,以下为翻译正文: 为了开发一个基于以太坊的 ...

  2. 使用Express构建RESTful API

    RESTful服务 REST(Representational State Transfer)的意思是表征状态转移,它是一种基于HTTP协议的网络应用接口风格,充分利用HTTP的方法实现统一风格接口的 ...

  3. json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例

    json-lib-2.4-jdk15.jar所需全部JAR包.rar  java jsoup解析开彩网api接口json数据实例 json-lib-2.4-jdk15.jar所需全部JAR包.rar  ...

  4. .net mvc web api 返回 json 内容,过滤值为null的属性

    原文:http://blog.csdn.net/xxj_jing/article/details/49508557 版权声明:本文为博主原创文章,未经博主允许不得转载. .net mvc web ap ...

  5. .Net MVC 4 Web Api 输出Json 格式

    1.Global 中增加json输出 GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add( ...

  6. MVC web api 返回JSON的几种方式,Newtonsoft.Json序列化日期时间去T的几种方式。

    原文链接:https://www.muhanxue.com/essays/2015/01/8623699.html MVC web api 返回JSON的几种方式 1.在WebApiConfig的Re ...

  7. 通过express来打造api服务器

    通过express来打造api服务器[ 后端接口 ] 1.步骤 1.通过脚手架创建项目 const express = require('express'); const router = expre ...

  8. [转载]Android SDK 离线文档 (api 20)(升级至api 23)

    原文地址:SDK 离线文档 (api 20)(升级至api 23)">Android SDK 离线文档 (api 20)(升级至api 23)作者:leechenhwa Android ...

  9. nodejs+express+mongodb写api接口的简单尝试

    1:启动mongodb服务 我的mongoDB的安装目录:E:\mongoDB\bin,版本:3.4.9 打开cmd  -> e:(进入e盘) -> cd mongoDB/bin(进入mo ...

随机推荐

  1. 【STL】next_permutation的原理和使用

    1.碰到next_permutation(permutation:序列的意思) 今天在TC上碰到一道简单题(SRM531 - Division Two - Level One),是求给定数组不按升序排 ...

  2. 1.SQL语句入门

    --SQL语句入门-- --1.sql语言是解释语言 --2.它不区分大小写 --3.没有"",所有字符或者字符串都使用''包含 --4.sql里面也有类似于c#的运算符 -- 算 ...

  3. IOS-MVC的使用

    1.Model不允许和Controller,View打交道.也就是Model根本不知道谁会用自己,Model中不能有任何对 Controller和View的引用.正所谓:Don't call me, ...

  4. mac VPN配置

    来自: http://www.eefocus.com/Kevin/blog/11-09/230878_53c71.html RSA的SecurID长的是这个样子滴: Mac里面,可以设置VPN, 方法 ...

  5. Centos7 ZooKeeper 安装过程

    www.apache.org/dist/上可以下载Hadoop整个生态环境的组件,我下的Zookeeper3.4.6版本 我一般都是在一个虚拟机上将一.二步都做完,然后克隆出来,再到克隆出来的虚拟机上 ...

  6. tomcat和apache区别联系

    tomcat和apache区别联系 Apache是普通服务器,本身只支持html即普通网页.不过可以通过插件支持php,还可以与Tomcat连通(单向Apache连接Tomcat, 就是说通过Apac ...

  7. XMPP框架下微信项目总结(2)授权登陆/注销/注册/打印日志

    xmpp授权登陆步骤1 初始化xmppstream 连接服务器 传递属性jid(IP地址 端口号)2 连接成功后 传递“登”陆密码授权 3 授权后,发送在线消息xmpp所有的代理都是子线程中调用的,处 ...

  8. Java使用正则表达式解析LRC歌词文件

    LRC歌词是一种应用广泛的歌词文件,各主流播放器都支持. lrc歌词文本中含有两类标签: 1.标识标签(ID-tags) [ar:艺人名] [ti:曲名] [al:专辑名] [by:编者(指编辑LRC ...

  9. 在DB2 for z/os上创建指定pagesize的数据库

    ASNTDIFF的diff table有一列类型为varchar 15000,z上创建db默认的pagesize是4K,无法创建table,所以需要创建一个大pagesize的database. db ...

  10. 20145206邹京儒《Java程序设计》课程总结

    20145206邹京儒<Java程序设计>课程总结 (按顺序)每周读书笔记链接汇总 第一周:http://www.cnblogs.com/ZouJR/p/5213572.html http ...