你可以把HTTP响应的数据流 (stream)绑定到一个StreamReader对象,然后就可以通过ReadToEnd()方法把整个HTTP响应作为一个字符串取回。...l UserAgent:获取或设置 User-agent HTTP 标头的值 C# HttpWebRequest提交数据方式其实就是GET和POST两种,那么具体的实现以及操作注意事项是什么呢?...C# HttpWebRequest提交数据方式: 程序使用HTTP协议和服务器交互主要是进行数据的提交,通常数据的提交是通过 GET 和 POST 两种方式来完成,下面对这两种方式进行一下说明: C#...C# HttpWebRequest提交数据方式4. 使用 POST 方式提交中文数据。...Api_AnswerQuestion>(); var url = WebConfigManager.GetAppSettings("DataCenterUrl") + "/rest
一、理解 REST 注意:由于文章篇幅太长,超出了字数,这是文章的第一部分,明天分享文章的第二部分,请见谅!...在没有足够了解 REST 的时候,我们很容易错误的将其视为 “基于 URL 的 Web 服务”,即将 REST 和 SOAP 一样,是一种远程过程调用(remote procedure call,RPC...四、基于Rest的Controller(控制器) 我们的 REST API : GET 方式请求 /api/user/ 返回用户列表 GET 方式请求 /api/user/1返回id为1的用户 POST...你也许好奇为什么此响应通过JSON字符串发送的,在响应里的Content-Type 头说明了这个。...但是也没人阻止你为POST或者PUT方式响应体里发送内容。但是这还是REST 的API?值得怀疑。 不管怎样,我们试着创建同一个用户时,你将获得HTTP冲突的响应。 ?
REST以资源为导向,资源由URI表示:/library/ 端点(endpoint)是动词和URI的组合,例如:GET: /books/ 端点可以理解为对资源执行的操作。..., 4xx 表示客户端错误 和5xx 表示服务器错误 当然你还可以使用其他 HTTP 协议提供给 REST API 设计的功能 ,但这些都必须牢记在心里。...不要返回纯文本 尽管并非强制规定的,但大多数REST API通常约定使用JSON作为数据格式。然而,仅返回包含JSON格式字符串的响应体是不够好的。您还应该指定Content-Type标头。...有一天,当我将REST API集成到我的一个项目中时,每次调用都收到HTTP 500内部错误。...现在问题来了:如何将这样的功能融入REST API? 我的答案是:使用查询字符串(querystring)。 我认为使用查询字符串实现分页非常明显。它看起来像这样: GET: /books?
每个资源都由URI/ID标识。REST本身跟http无关,但是目前http是与它相关的唯一实例。REST有着优雅、简洁的特性,本文是根据豆瓣api来谈谈自己对restful的一些理解。...URI尽量使用“-”代替下划线“_“。 URI统一使用小写字母 URI不包含文件扩展名 使用?用来过滤资源,比如?limit=10 :指定返回10条记录。 不使用无意义的字符串、数字,要做到简洁。...比如 豆瓣图书api: name method api 获取图书信息 get /v2/book/:id 用户收藏某本图书 post /v2/book/:id/collection 用户修改对某本图书的收藏...5.使用通用的错误码 通用错误码,具体产品由具体产品api给出。...比如豆瓣api: 错误码 错误信息 含义 999 unknow_v2_error 未知错误 1000 need_permission 需要权限 1001 uri_not_found 资源不存在 … ….
最近几年REST API越来越流行,特别是随着微服务的概念被广泛接受和应用,很多Web Service都使用了REST API。...这些系统按照自己的理解,采用了类似REST API的部分形式(如用GET/POST/PUT/DELETE进行CURD),但更多的是随意设计,搞出了REST-RPC式,甚至是RPC式的API。...客户端通过REST API返回的表述,以及表述中的URI,进行客户端应用状态的转移。 但REST更强调的是资源状态。...302(Moved Temporarily):表示资源的URI已临时性更改,需要在响应内容中获取新的URI。 400(Bad Request):表示请求有问题,如参数错误等。...500(Internal Server Error):通用内部错误。 502(Bad Gateway):网关错误,从上游服务器收到无效响应。
本文将从零开始,逐步介绍如何使用 C# 设计并实现一个简单的 RESTful API。什么是 RESTful API?...如何设计 RESTful API?设计 RESTful API 时,我们需要考虑以下几个方面:资源识别:确定 API 将暴露哪些资源。URI 设计:创建清晰且具有描述性的 URI 来标识资源。...错误处理:定义一致的错误处理机制。...错误处理:当请求失败时,应该返回一个包含错误信息的 JSON 对象。安全性:考虑使用 HTTPS 加密通信,以及实现身份验证和授权机制。性能优化:通过缓存、分页等技术提高 API 的性能。...通过上述步骤,我们已经成功地设计并实现了一个基本的 RESTful API。希望这篇教程能帮助你在 C# 中更好地理解和实践 RESTful API 的开发。
其他潜在的可发现的URI和Microformat 5. 总结 1. 概览 本文将重点介绍REST API的可发现性、HATEOAS及由测试驱动的实际场景。 2....在本节中,我们将使用Junit、 rest-assured和Hamcrest来测试API接口的发现性特征。由于以前已经保护了REST服务,所以每个测试首先需要在使用API之前进行身份认证 。...发现有效的HTTP方法 当用无效的HTTP方法调用REST服务时,响应应该是405 METHOD NOT ALLOWED;此外,它还应该帮助客户端发现适用于该特定资源的有效HTTP方法,在响应中使用AllowHTTP...幸运的是,创建的URI与获取该类型所有资源的URI是相同的,惟一的区别是HTTP方法POST。表单也可以用来实现这个目的。 5....下一步,所有状态更改都由客户端使用REST API在表述中提供的可用的和可发现的转换来驱动(因此具有表述性状态转换)。
二、RESTFul设计风格 1、Rest与RestFul REST(英文:Representational State Transfer,简称REST),表述性状态转移,指的是一组架构原则。...Restful: 遵守了rest 原则 的web服务或web应用。...2、API设计六要素 资源路径(URI)、HTTP动词(Method)、过滤信息(query-string)、状态码(Status-code)、错误信息(Error)、返回结果(Result) ?..., 服务器返回完整的属性 DELETE: 从服务器删除资源 3)过滤信息 通常也叫做请求参数或查询字符串。...RESTFul 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。
REST API 关于什么是REST,我就不在这里赘述了,直接推荐REST作者的经典论文: 架构风格与基于网络的软件架构设计(中文修订版) 下面我只想用一些实例描述几种架构风格在API定义方面的不同。...API定义 本项目的API是打算使用REST方式定义的。那么,首先,就是资源的Endpoint定义。...关于这个问题,网上有很多讨论,有些人喜欢直接加在URI中,像这样: http://api.domain.com/v2.1/posts 有些人喜欢加在参数里,像这样: http://api.domain.com...因此,这里的code我之前喜欢将其定义为业务错误码。但是,如果按照REST风格来设计,还是有统一的code更合适。因此,我这次尝试下改变习惯。...URL签名算法步骤如下: 将所有参数按参数名进行升序排序; 将排序后的参数名和值拼接成字符串stringParams,格式:key1value1key2value2…; 在上一步的字符串前面拼接上请求URI
简介 REST 是一种软件架构风格,它依赖于描述如何定义和访问资源的规则。很难想象没有RESTful API的现代互联网。在本文中,我们将深入探讨 REST 和相关 HTTP 概念。 2....,例如 400 – 错误请求或 401 – 未授权 5xx- 服务器错误 – 通知服务器端发生错误,例如,500 – 内部服务器错误,501 – 未实现 4....因此,它表明考虑到 REST 约束,API 的质量很好。 0级被称为痘沼泽。在这个层面上,API并没有使用HTTP协议的全部潜力,通常,它只使用POST和GET方法。因此,HTTP 协议仅用作传输层。...级别 0 API 的示例终结点可能如下所示: POST /api/createUser POST /api/updateUser GET /api/findUserCopy 级别 1 API 定义资源及其...级别 1 API 的示例 URI 包括: POST /api/users/create GET /api/users/{id}/find POST /api/users/{id}/updateCopy
第 1 章 REST 简介 1.1 API 与 REST API 是一个系统向外暴露或公开的一套接口,通过这些接口,外部应用程序能够访问该系统 REST 是一种基于资源的架构风格,任何能够命名的对象都是一个资源...,如 user,一个资源具有一个统一的资源标识符(URI),如 user/1234,通过 URI 能够标识并访问该资源 REST 定义了6个架构约束: 客户端-服务器 统一接口 分层系统 缓存 无状态...:请求包含语法错误或请求内容不正确 5xx:服务端错误:服务器在处理请求的过程中发生了错误 1.3 REST 最佳实践 首先,在实现 RESTful 系统时,应正确地使用 HTTP 方法、HTTP 消息头和...中 如果一个操作无法对应到资源的某个操作上,此时可以适当地在 URI 中包含动词,但仍然应该基于一个资源的标识符 查询字符串可以用来对资源进行筛选、搜索或分页查询 URI 应使用小写字母 URI 中可以使用中划线...添加版本有以下4中方式: 使用 URI 路径,如 api/v1/users 使用查询字符串,如 api/users?
在了解REST API URI设计的规则之前,让我们快速浏览一些我们将要讨论的术语。 URIs REST API使用统一资源标识符(URI)来寻址资源。...在不取消引用时,就不应该查看URI字符串的内容以获取其他信息。 ——蒂姆·伯纳斯 - 李 客户端必须遵循Web的链接范例,将URI视为不透明标识符。...REST API设计人员应该在考虑将REST API资源模型传达给潜在的客户端开发者的前提下,创造URI。在这篇文章中,我将尝试为REST API URI 引入一套设计规则。...例如: http://api.example.com/blogs/guy-levin/posts/this-is-my-first-post 规则4:不得在URI中使用下划线(_) 一些文本查看器为了区分强调...虽然一些”语法学家”会告诉你使用复数来描述资源的单个实例是错误的,但实际上为了保持URI格式的一致性建议使用复数形式。
在了解 REST API URI 设计的规则之前,让我们快速过一下我们将要讨论的一些术语。 URI REST API 使用统一资源标识符(URI)来寻址资源。...当你没有取消引用时,你不应该查看 URI 字符串的内容以获取其他信息。 - Tim Berners-Lee 客户端必须遵循 Web 的链接范例,将 URI 视为不透明标识符。...REST API 设计人员应该创建 URI,将 REST API 的资源模型传达给潜在的客户端开发人员。在这篇文章中,我将尝试为 REST API URsI 引入一套设计规则。...例如: http://api.example.com/blogs/guy-levin/posts/this-is-my-first-post 规则#4:不得在 URI 中使用下划线(_) 文本查看器(...虽然你的语法常识会告诉你使用复数来描述资源的单个实例是错误的,但实际的答案是保持 URI 格式一致并且始终使用复数形式。
Spring Boot提供了一种为Rest Controller文件编写单元测试的简便方法。...控制器的单元测试 在本节中,看看如何为REST控制器编写单元测试。...首先,需要创建用于通过使用MockMvc创建Web应用程序上下文的Abstract类文件,并定义mapToJson()和mapFromJson()方法以将Java对象转换为JSON字符串并将JSON字符串转换为...下面给出了GET API测试用例的代码。此API用于查看产品列表。...此API用于创建产品。
struts2: 玩转 rest-plugin 一文中,学习了用struts2开发restful service的方法,发现用c#以post方式调用时各种报错,但java、ajax,包括firefox...的rest client插件测试也无问题。...先给出rest service中的这个方法: 1 // POST /orders 2 public HttpHeaders create() throws IOException,...而c#中如果以post方法请求url时,不论是HttpWebRequest还是WebClient,默认都会添加expect = 100-continue的头信息,因此c#调用时会报错,而firefox的...为何c#要自动拼这上这行头信息?
当服务器发生变化(如修改了资源的URI)时,客户端也需要进行相应的修改。而在使用HATEOAS的REST服务中,客户端可以通过服务器提供的资源的表达来智能地发现可以执行的操作。...◆ REST API管理 下面介绍几种简洁的REST API设计的最佳实践,可以作为真假REST的一个判别依据。 1.使用的是名词而不是动词 使用名词来定义接口。.../blog/api/v1 9.充分使用HTTP状态码来处理错误 HTTP状态码(HTTP Status Code)是用来表示网页服务器HTTP响应状态的3位数字代码。...在设计API处理错误时,应该充分使用HTTP状态码,而不是简单地抛出一个“500-Internal Server Error(内部服务器错误)”。...所有的异常都应该有一个错误的payload作为映射,下面是一个例子。
REST(Representational State Transfer)表述性状态转换,REST指的是一组架构约束条件和原则。...虽然REST本身受Web技术的影响很深, 但是理论上REST架构风格并不是绑定在HTTP上,只不过目前HTTP是唯一与REST相关的实例。 1....POST一般向“资源集合”型uri发起 POST /animals //新增动物 POST /zoos/1/employees //为id为1的动物园雇佣员工 PUT:更新单个资源(全量),客户端提供完整的更新后的资源...对第三点的实现稍微多说一点: Java 服务器端一般用异常表示 RESTful API 的错误。API 可能抛出两类异常:业务异常和非业务异常。...URI失效 随着系统发展,总有一些API失效或者迁移,对失效的API,返回404 not found 或 410 gone;对迁移的API,返回 301 重定向。
资源与URI 统一资源接口 资源的表述 资源的链接 状态的转移 2. 1 资源与URI REST全称是表述性状态转移,那究竟指的是什么的表述? 其实指的就是资源。...上的URI都是冰冷的数字或者无意义的字符串,但现在越来越多的网站使用_或-来分隔一些单词,让URI看上去更为人性化。...通用错误响应 503 (Service Unavailable)- 服务端当前无法处理请求 POST 不安全且不幂等 使用服务端管理的(自动产生)的实例号创建资源 创建子资源 部分更新资源 如果没有被修改...POST 和PUT在创建资源的区别在于,所创建的资源的名称(URI)是否由客户端决定。...下面我们来看一些实践上常见的设计: 在URI里边带上版本号 有些API在URI里边带上版本号,例如: http://api.example.com/1.0/foo http://api.example.com
资源与URI 统一资源接口 资源的表述 资源的链接 状态的转移 2. 1 资源与URI REST全称是表述性状态转移,那究竟指的是什么的表述? 其实指的就是资源。...上的URI都是冰冷的数字或者无意义的字符串,但现在越来越多的网站使用_或-来分隔一些单词,让URI看上去更为人性化。...通用错误响应 503 (Service Unavailable)- 服务端当前无法处理请求 POST 不安全且不幂等 使用服务端管理的(自动产生)的实例号创建资源 创建子资源 部分更新资源 如果没有被修改...POST和PUT在创建资源的区别在于,所创建的资源的名称(URI)是否由客户端决定。...下面我们来看一些实践上常见的设计: 在URI里边带上版本号 有些API在URI里边带上版本号,例如: http://api.example.com/1.0/foo http://api.example.com
返回用户列表 GET 方式请求 /api/user/1返回id为1的用户 POST 方式请求 /api/user/ 通过user对象的JSON 参数创建新的user对象 PUT 方式请求 /api/user...你也许好奇为什么此响应通过JSON字符串发送的,在响应里的Content-Type 头说明了这个。...获取单个用户 GET方式 指定/user/1 现在试着发送一个带有错误识别码的GET请求,将收到一个HTTP 404 3.创建一个 User 选择POST方法,指明uri /user/ 指明POSTMAN...但是也没人阻止你为POST或者PUT方式响应体里发送内容。但是这还是REST 的API?值得怀疑。 不管怎样,我们试着创建同一个用户时,你将获得HTTP冲突的响应。...API添加CORS支持 当访问REST API时,你可能需要面对“同源策略”问题。