简介

  • “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. 【linux】sudo su切换到root权限

    在用户有sudo权限但不知道root密码时可用 sudo su切换到root用户

  2. [Android Pro] DES加密 version1

    reference to : http://blog.csdn.net/wfung_kwok/article/details/7766029 加密和解密要用同一個key AES: import jav ...

  3. mongodb3.x版本用户管理方法

    db.auth() 作用:验证用户到数据库. 语法: db.auth( { user: <username>, pwd: <password>, mechanism: < ...

  4. Mysql事务隔离级别

    在说Isolation之前,需要谈谈关系型数据库的ACID特性. A(atomicity,原子性),指一个事务要么完全完成,要么全部回滚到起始状态,不存在中间状态. C(Consistency,一致性 ...

  5. Javaweb---Servlet过滤器

    Servlet过滤器从字面上的字意理解为景观一层次的过滤处理才达到使用的要求,而其实Servlet过滤器就是服务器与客户端请求与响应的中间层组件,在实际项目开发中Servlet过滤器主要用于对浏览器的 ...

  6. jquery学习笔记---闭包,原型链,this关键字

    网上的资料很多,关于闭包,原型链,面向对象之内的.本人也有一点自己的总结. 关于this: this 的值取决于 function 被调用的方式,一共有四种, 如果一个 function 是一个对象的 ...

  7. Ext Js【Hello World】 ——4.1 beta 1

    准备:vs+ExtJs4.1Beta1 ExtJS 4.1  xiazai_ https://yunpan.cn/cqv6bdBwtRjAj (提取码:2733) 引用,cs文件,js主入口,zh—c ...

  8. Delphi中弹出提示框的四种方法

    参考:http://blog.itpub.net/8432156/viewspace-924843/ 更为详细的内容请参见:http://blog.csdn.net/akof1314/article/ ...

  9. JVM_Bind:8080 的解决办法【131031】

    出错情况:运行 Tomcat 时报错 含义:8080 位置显示的端口被其他进程占用 解决方法: 方法1: 开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID ...

  10. SQL Server排序规则

    在使用数据库的过程中,总会碰到一些特别的需求.有时候需要储存中文字符,区分大小写或者按照中文的比划顺序排序.这就涉及到了对数据库排列规则的选择. 我们一般可以选择数据库名称-->右键属性(Pro ...