关于RESTful 的使用(实战)
今天在博客园首页看到一篇关于写 RESTful, 大致就是前端定义的一种规范. 原文如下,
https://www.cnblogs.com/zhangmumu/p/11936262.html
看了一圈才发现, 在目前的公司, 4年来一直在用这种 "规范", 感觉也就是约定俗成的东西.
首先说一下, API接口的 路由配置 WebApiConfig.cs

第一步: 代码如下, 这里路由格式为 v1/{controller}/{id} , 版本 指定 v1
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "v1/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.EnableSystemDiagnosticsTracing();
}
}
第二步: 对于API接口 返回的内容, 做一个规范 (这里一般返回json数据) , 结果实体类如下:
//WebAPI 数据结果类
public class Root<T>
{
public bool Result { get; set; }
public string ErrorCode { get; set; }
public string Message { get; set; } public T Data { get; set; } public Root()
{ } public Root(bool r, string e, string m)
{
Result = r;
ErrorCode = e;
Message = m;
} public Root(bool r, string e, string m, T data)
{
Result = r;
ErrorCode = e;
Message = m;
Data = data;
} }
第三步: API 接口定义
public class GetXxDataController : ApiController
{
// 这里有一行权限验证 代码 (...)
public HttpResponseMessage Post([FromBody]QueryParms parms) //QueryParms 是一个 类,参数字段都在这个类里面
{
string msg;
try
{
string json = new XxDataBLL().QueryXxData(parms); //直接返回 json信息
//如果是返回某一个实体类(或者List<T>) , 将其 json 序列化一下.
// string json = Newtonsoft.Json.JsonConvert.SerializeObject(List<T>);
                Root<string> root = new Root<string>()
                {
                    Result = true,
                    ErrorCode = "0",
                    Message = "",
                    Data = json
                };
/*
//或者直接 返回 Root<T>
List<XxData> dataList = new XxDataBLL().QueryXxDataList(parms);//一个查询方法, 返回一个 List<T>
Root<XxData> root = new Root<XxData>()
                  {
                                             Result = true,
                                                  ErrorCode = "0",
                                                 Message = "接口调用成功!",
                                               Data = dataList
};
*/
return Request.CreateResponse(HttpStatusCode.OK, root);
            }
            catch (Exception ex)
            {
                if (ex.InnerException != null)
                {
                    msg = ex.InnerException.Message;
                }
                else
                {
                    msg = ex.Message;
                }
                return Request.CreateResponse(HttpStatusCode.OK, new Root<string>(false, "-1", msg)); //如果出错返回一个错误的json, 状态是 false.
            }
        }
    }
补充一下后续的使用:
页面前端调用API 我就不说了, 反正一般 就是 jquery ajax 之类的.
后端调用API统一方案
1.准备好 调用 POST的 参数
string newUrl=" http://xxxx.xxxx.xxxx.xxxx/XxDataAPI/v1/GetXxData";
string postdata="account=?&pwd=?&id=?"; // 将?替换成对应的参数值
2. 后台方法
public string GetJsonDataByPostUrl(string newUrl, string postString)
{
byte[] postData = System.Text.Encoding.UTF8.GetBytes(postString); //编码,尤其是汉字,事先要看下抓取网页的编码方式
using (WebClient client = new WebClient())
{
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
//采取POST方式必须加的header,如果改为GET方式的话就去掉这句话即可
client.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); byte[] responseData = client.UploadData(newUrl, "POST", postData); //得到返回字符流 string jsonstr = Encoding.UTF8.GetString(responseData); return jsonstr;
}
}
然后调用:
string json = GetJsonDataByPostUrl(newUrl, postdata); //先拿到接口返回的json, 可以写日志记录下来, 顺便把接口调用的参数也记录下来 Root<XxData> xxdata = JsonConvert.DeserializeObject<XxData>(json);
if (xxdata !=null&&xxdata.Result == true)
{
//使用逻辑....
}
如果 接口返回的是一个实体类对象(或者list<T>) , 但是 原接口出错, 返回 new Root<string>(false, "-1", msg);
Root<XxData> xxdata = JsonConvert.DeserializeObject<XxData>(json); 反序列化之后, 得到的对象 xxdata.Result 就是 false,
回头查问题, 看看日志里面记录的json 日志信息就行了.
关于RESTful 的使用(实战)的更多相关文章
- <<Java RESTful Web Service实战>> 读书笔记
		
<<Java RESTful Web Service实战>> 读书笔记 第一章 JAX-RS2.0入门 REST (Representational State ransf ...
 - 从0使用Ruby on Rails打造企业级RESTful API项目实战之我的云音乐
		
本节对我们项目实现的功能和知识点做一个简单的介绍,因为是RESTful API项目,所以对于后端来说基本上没有什么UI界面可展示,那我们就在关键的点,使用客户端(Android)实现的效果图. 课程简 ...
 - 从 0 使用 SpringBoot MyBatis MySQL Redis Elasticsearch打造企业级 RESTful API 项目实战
		
大家好!这是一门付费视频课程.新课优惠价 699 元,折合每小时 9 元左右,需要朋友的联系爱学啊客服 QQ:3469271680:我们每课程是明码标价的,因为如果售价为现在的 2 倍,然后打 5 折 ...
 - RESTful Web Service实战 小结1
		
1 REST的基本实现形式HTTP+URI+XML,但不是唯一形式.XML后来被Json格式替代.REST是一中架构风格(Representational State Transfer,表述性状态转移 ...
 - Spring Boot & Restful API 构建实战!
		
作者:liuxiaopeng https://www.cnblogs.com/paddix/p/8215245.html 在现在的开发流程中,为了最大程度实现前后端的分离,通常后端接口只提供数据接口, ...
 - 基于MVC的RESTFul风格API实战
		
基于MVC的RESTful风格的实现 1.RESTful风格阐述 REST服务是一种ROA(Resource-Oriented Architecture,面向资源的架构)应用.主要特点是方法信息存在于 ...
 - SpringMVC+RestFul详细示例实战教程
		
一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--conf ...
 - 带你入门带你飞Ⅱ 使用Mocha + Chai + SuperTest测试Restful API in node.js
		
目录 1. 简介 2. 准备开始 3. Restful API测试实战 Example 1 - GET Example 2 - Post Example 3 - Put Example 4 - Del ...
 - RESTful WebService 入门实例
		
/* 新建MavenProject,使用以下代码,创建类和POM文件.使用命令行切换到Project根目录,运行mvn package(或者,选中pom.xml 文件右键单击 > run a ...
 - Vue2构建项目实战
		
转载整理自http://blog.csdn.net/fungleo/article/details/77575077 vue构建单页应用原理 SPA 不是指水疗.是 single page web a ...
 
随机推荐
- 工厂方法在Spring源码中的运用
			
我们都知道Spring中IOC是使用的工厂模式,但是对于实现细节就一知半解了,今天这篇文章就带大家解读Spring中是如何使用工厂模式的. 在上篇文章中我们懂了什么是工厂模式,这篇文章就带着学过的概念 ...
 - 后端框架的学习----mybatis框架(3、配置解析)
			
3.配置解析 1.核心配置文件 2.环境配置(environment) 3.属性(properties) 可以通过properties属性来实现引用配置文件 这些属性可以在外部进行配置,并可以进行动态 ...
 - python的微积分运算
			
import sympy sympy.init_printing() from sympy import I, pi, oo import numpy as np 求函数的导数 x = sympy.S ...
 - java中的垃圾回收算法与垃圾回收器
			
常用的垃圾回收算法 标记-清除 标记清除算法是一种非移动式的回收算法,分为标记 清除 2个阶段,简而言之就是先标记出需要回收的对象,标记完成后再回收掉所有标记的内存对象,如下图 可见回收后图中被标记的 ...
 - 八、指定节点pod运行在固定节点
			
指定pod运行在固定节点 一.指定固定节点:Pod.spec.nodeName Pod.spec.nodeName 将 Pod 直接调度到指定的 Node 节点上,会跳过 Scheduler 的调度策 ...
 - Bob 的生存概率问题
			
Bob 的生存概率问题 作者:Grey 原文地址: 博客园:Bob 的生存概率问题 CSDN:Bob 的生存概率问题 题目描述 给定五个参数 n , m , i , j , k,表示在一个 n*m 的 ...
 - .NET性能优化-是时候换个序列化协议了
			
计算机单机性能一直受到摩尔定律的约束,随着移动互联网的兴趣,单机性能不足的瓶颈越来越明显,制约着整个行业的发展.不过我们虽然不能无止境的纵向扩容系统,但是我们可以分布式.横向的扩容系统,这听起来非常的 ...
 - JVM堆内存转储
			
在发生内存溢出错误 java.lang.OutOfMemoryError 时, JVM自动执行堆内存转储,以方便事后进行排查和分析. JVM提供了一个命令行启动参数 HeapDumpOnOutOfMe ...
 - windows socket网络编程--事件选择模型
			
目录 事件选择模型概述 API详解 工作原理 代码实现 事件选择模型概述 Winsock提供了另一种有用的异步事件通知I/O模型--WSAEventSelect模型.这个模型与WSAAsyncSele ...
 - 嵌入式-C语言基础:二维数组的地址写法
			
二维数组a的有关指针: 表示形式 含义 ...