简介

  • “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. Spring mvc 文件上传到文件夹(转载+心得)

    spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...

  2. 【leetcode】Convert Sorted List to Binary Search Tree (middle)

    Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...

  3. ibatis中使用like模糊查询

    select * from table1 where name like '%#name#%' 两种有效的方法: 1) 使用$代替#.此种方法就是去掉了类型检查,使用字符串连接,不过可能会有sql注入 ...

  4. C --gettimeofday===获取某个程序经历的时间

    #include <stdio.h> #include <sys/time.h> #include <time.h> int gettimeofday(struct ...

  5. CentOS7下Firewall防火墙配置用法详解

    官方文档地址: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide ...

  6. 通过mysql命令行理解mysql

    引言:工具不可谓给我们的生活带来了便利,但有些时候我们却忘记了事物本身的意义.在大多数人都在追捧甚至是盲从各种各样的工具有多先进的时候,你是否有反思过:你目前是否有使用它的资格. 假设你学会了使用一款 ...

  7. Myeclipse 2016 & 2014 下载

    myeclipse-2016-ci-6-offline-installer-windowshttps://downloads.genuitec.com/downloads/myeclipse/inst ...

  8. Delphi中的变量作用域简介

    1.在函数或过程中声明的变量是局部变量,只能在函数或过程中使用 2.在单元的implementation部分声明的变量是单元级的(又称模块级.窗体级)变量,该单元的所有函数与过程都能使用,其他引用该单 ...

  9. 【Java EE 学习 20】【使用过滤器实现登陆验证、权限认证】【观察者模式和监听器(使用监听器实现统计在线IP、登录IP 、踢人功能)】

    一.使用过滤器实现登录验证.权限认证 1.创建5张表 /*使用过滤器实现权限过滤功能*/ /**创建数据库*/ DROP DATABASE day20; CREATE DATABASE day20; ...

  10. 攻城狮在路上(壹) Hibernate(十七)--- Hibernate并发处理问题

    一.多个事务并发运行时的并发问题: 总结为第一类丢失更新.脏读.虚读.不可重复读.第二类丢失更新. 1.第一类丢失更新: 撤销一个事务时,把其他事务已提交的更新数据覆盖. 2.脏读: 一个事务读到另一 ...