WebApi系列文章

【01】浅谈HTTP在WebApi开发中的运用

【02】聊聊WebApi体系结构

【03】详解WebApi参数的传递

【04】详解WebApi测试和PostMan

【05】浅谈WebApi Cores

【06】详解WebApi 异常处理

【07】用WebAPI写个基于EF的CURD

【08】浅谈WebAPI身份认证

【09】详解系列化和模型绑定

【10】浅谈WebApi如何配合Mvc有效工作

【11】浅谈API Reference

【12】浅谈接口在软件架构中的作用

【13】浅谈WebApi和WebService的比较

【14】浅谈如何设计一个良好的接口


阅读目录

一     概述

二    Get

1   基础数据类型

1.1  方法只含一个形参

1.2  方法含多个形参

2   实体对象类型

3   实体对象和基础数据类型混合

4   最小满足原则

5   url长度限制

6   Get规范化

7    关于实体作为参数传递的拓展

7.1   借助[FromUri]特性传递实体

7.2   系列化和反系列化传递实体

三    Post

1   基本数据类型传递

1.1[FromBody]单个参数传递

1.2  Dynamic单个参数传递

2   实体作为参数传递

3   实体集合作为参数传递

4   数组作为参数传递

5小结

四   总结

一 概述

一般地,我们在研究一个问题时,常规的思路是为该问题建模;我们在研究相似问题时,常规思路是找出这些问题的共性和异性。基于该思路,我们如何研究WebApi参数传递问题呢?

首先,从参数本身来说,种类较为多(如int,double,float,string,array,Object等),且有些类型较为复杂(如值类型和引用类型的机制等);

其次,从基于WebApi的Http请求方法来说,种类多且不尽相同(如Get,post,Delete,put,head等),在上一篇文章 :【WebApi系列】浅谈HTTP在WebApi开发中的运用  中,我们简要描述了Http请求的20个方法;

..........

如此复杂且不尽相同,关于WebApi参数传递,我们该选择什么作为切入点来研究呢?基于我们上面提到的研究思路,我们想到了.NET Framework框架,那么,我们来看看基于.NET Framework框架的的WebApi

模板是怎样的呢?

请按图中步骤操作

我们来看看Values控制器是怎样的

  1. public class ValuesController : ApiController
  2. {
  3. // GET api/values
  4. public IEnumerable<string> Get()
  5. {
  6. return new string[] { "value1", "value2" };
  7. }
  8.  
  9. // GET api/values/5
  10. public string Get(int id)
  11. {
  12. return "value";
  13. }
  14.  
  15. // POST api/values
  16. public void Post([FromBody]string value)
  17. {
  18. }
  19.  
  20. // PUT api/values/5
  21. public void Put(int id, [FromBody]string value)
  22. {
  23. }
  24.  
  25. // DELETE api/values/5
  26. public void Delete(int id)
  27. {
  28. }
  29. }

从Values控制器,我们不难得出如下几个结论:

(1)WebApi常规方法为四个:Get,Post,Put和Delete;

(2)四种方法的参数可归结为两大类:url传递(Request-url)和Body(Request-body)传递;

(3)基于(2),我们将四种方法的参数传递归为两大类,而这两大类又集中在Get和Post中体现了(Put是Get和Post的组合,Delete与Get类似);

其实,分析到现在,我们很容易找得到了研究WebApi参数传递的切入点?研究Get和Post方法参数传递即可。是的,没错,我们本篇文章就是基于Get和Post方法的参数传递,前者对应Request-url,后者对应Reqeust-Body。

二  Get

1  基础数据类型


1.1  方法只含一个形参(参数传得进去)

ajax

  1. $(document).ready(function () {
  2. $("#FindProdcutDetail").click(function () {
  3. $.ajax({
  4. type: "Get",
  5. //url: "/api/Default/GetProductDetails?ProductCode=JX80869"
  6. url: "/api/Default/GetProductDetails",
  7. data: { "ProductCode":"JX80869"}
  8. })
  9. })
  10. })

Result

总结

(1)当Get方法形参为一个且为基本数据类型时,Get方法能接受外部传递的值

(2)Get传值的本质是通过url字符串拼接,如上两两种url形式的传递的结果都是一样

url形式1

  1. url: "/api/Default/GetProductDetails?ProductCode=JX80869"

url形式2

  1. url: "/api/Default/GetProductDetails",
  2. data: { "ProductCode":"JX80869"}

我们用Goole Chrome来看看结果,发现url形式1和url形式2均一致

(3)Get传递参数本质是url字符串拼接,Request-Head头部传递,Request-Body中不能传递(这是与Post方法的本质区别),我们举两个例子

例子1:我们将形参添加[FromBody]属性后,值传递不进去

例子2:我们用PostMan来测试,发现PostMan中,Get方法参数Body为灰色,是不能选中的

1.2  方法含有多个形参(参数传得进去)

  1. $(document).ready(function () {
  2. $("#FindProdcutDetail").click(function () {
  3. $.ajax({
  4. type: "Get",
  5. url: "/api/Default/GetProductDetails",
  6. data: { "ProductCode": "JX80869","ProductName":"YaGao"}
  7. })
  8. })
  9. })

result

2   实体对象类型(参数传不进去)


model

  1. public class ProductDetail
  2. {
  3. //产品编码
  4. [Required]
  5. public string ProductCode { get; set; }
  6. //产品名称
  7. [Required]
  8. public string ProductName { get; set; }
  9. //产品价格
  10. [Required]
  11. public double ProductPrice{ get; set; }
  12. }

ajax

  1. $(document).ready(function () {
  2. var productDetail = { "ProductName": "YaGao", "ProductCode": "JX80869", "ProductPrice": 40.5};
  3. $("#FindProdcutDetail").click(function () {
  4. $.ajax({
  5. type: "Get",
  6. url: "/api/Default/ProductDetails",
  7. data: productDetail
  8. })
  9. })
  10. })

result:

分析

3   实体对象和基础数据类型混合(实体传不进去,基础数据能传递进去)


ajax

  1. $(document).ready(function () {
  2. $("#FindProdcutDetail").click(function () {
  3. $.ajax({
  4. type: "Get",
  5. url: "/api/Default/GetProductDetails",
  6. data: { "_productDetail": "ObjectEntity","ProductName":"YaGao"}
  7. })
  8. })
  9. })

result

4  最小满足原则(参数传得进去)


所谓“最小满足原则”,指外部参数必须至少满足被调用方法的形参(形参个数,形参类型和形参名字),换句话说,被调用方法具有的形参,外部参数必须传递进来,被调用方法没有

的形参,外部参数传递与否都可以,否则将会产生状态码404错误,用数学集合的思路来理解的话,被调用方法的形参相当于外部参数的子集。如下例子,我们举一个真子集的例子,

即外部传递参数的个数大于被调方法的的形参个数。

Ajax

  1. $(document).ready(function () {
  2. $("#FindProdcutDetail").click(function () {
  3. $.ajax({
  4. type: "Get",
  5. url: "/api/Default/GetProductDetails",
  6. data: {"ProductCode": "JX00034", "ProductName": "YaGao", "ProductPrice": 20.5, "PrudcutType": "Daily Necessities"}
  7. })
  8. })
  9. })

result

分析:主要原因是路由规则,路由从url里面取参数与aciton参数匹配,直到匹配满足为止,具体详细深入内容,在【WebApi系列】路由章节分析。

5  url长度限制


url参数长度是有一定限制的,当超过一定长度,会报404错误

ajax

  1. $(document).ready(function () {
  2. $("#FindProdcutDetail").click(function () {
  3. $.ajax({
  4. type: "Get",
  5. url: "/api/Default/GetProductDetails",
  6. data: {
  7. "ProductCode":
  8. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  9. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  10. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  11. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  12. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  13. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  14. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  15. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  16. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  17. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  18. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  19. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  20. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  21. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  22. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  23. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  24. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  25. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  26. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  27. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  28. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  29. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  30. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  31. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  32. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +
  33. "JX00034xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  34. }
  35. })
  36. })
  37. })

result

6  Get规范化


关于Get类型规范化,应注意两点,避免不必要的错误或异常:(1)方法的命名尽量采用:“Get+方法名”的形式 (2)在每个方法上加上特性[HttpGet]。

例子:我们去掉[HttpGet]特性和方法前的Get,看看情况什么怎样的

ajax

  1. $(document).ready(function () {
  2. $("#FindProdcutDetail").click(function () {
  3. $.ajax({
  4. type: "Get",
  5. url: "/api/Default/ProductDetails",
  6. data: {"ProductCode": "JX00034 "}
  7. })
  8. })
  9. })

Controller

  1. public class DefaultController : ApiController
  2. {
  3. //[HttpGet]
  4. public string ProductDetails(string ProductCode)
  5. {
  6. return "values";
  7. }
  8. }

Result

7  关于实体作为参数传递的拓展


7.1  借助[FromUri]特性传递实体

ajax

  1. $(document).ready(function () {
  2. var GetEntityParam = { "ProductName": "YaGao", "ProductCode": "JX80869", "ProductPrice": 40.5};
  3. $("#FindProdcutDetail").click(function () {
  4. $.ajax({
  5. type: "Get",
  6. url: "/api/Default/ProductDetails",
  7. data: GetEntityParam
  8. })
  9. })
  10. })

result

7.2  系列化与反系列化传递实体

ajax

  1. $(document).ready(function () {
  2. $("#FindProdcutDetail").click(function () {
  3. $.ajax({
  4. type: "Get",
  5. url: "/api/Default/ProductDetails",
  6. data: { "productDetail": JSON.stringify({ "ProductName": "YaGao", "ProductCode": "JX80869", "ProductPrice": 40.5 }) }
  7. })
  8. })
  9. })

result

8  小结


(1)Get参数传递的本质是url字符串拼接;

(2)url字符串长度受限制;

(3)Get参数传递在Http请求头部传递,而不支持Request-Body传递;

(4)Get类型的方法支持参数为基本类型,不支持实体类型;

(5)Get类型的方法命名,应尽量采用“Get+方法名”的命名方式,且习惯性地在方法前加上[HttpGet特性];

(6)实参与形参的匹配,遵循路由规则;

(7)Get对应DB的Select操作,从这一点来理解,就知道为什么Http不支持实体对象传递的合理性了,因为一般情况,我们都是通过简单的字段查询信息(对应基本类型),

如ID号,用户名等,而不会通过一个实体查询数据;

三    Post

1  基本数据类型传递


1.1  [FromBody]单个参数传递

ajax

result

1.2 dynamic单个参数传递

ajax

  1. $(document).ready(function () {
  2. $("#FindProdcutDetail").click(function () {
  3. $.ajax({
  4. type: "Post",
  5. contentType: 'application/json',
  6. url: "/api/Default/PostParamToProducts",
  7. data: JSON.stringify({"ProductCode":"JX00039"})
  8. })
  9. })
  10. })

result

Googel Chrome查看

2 实体作为参数传递


ajax

  1. $(document).ready(function () {
  2. $("#FindProdcutDetail").click(function () {
  3. $.ajax({
  4. type: "Post",
  5. url: "/api/Default/PostParamToProducts",
  6. data: { "ProductCode": "JX00036","ProductName":"YaGao","ProductPrice":20.5}
  7. })
  8. })
  9. })

result

我们用Googel  Chrome看看

3 实体集合作为参数传递


ajax

  1. $(document).ready(function () {
  2. var list_ProductDetail = [
  3. { "ProductCode": "JX00031", "ProductName": "ToothPaste", "ProductPrice": "20.5" },
  4. { "ProductCode": "JX00032", "ProductName": "ToothBrush ", "ProductPrice": "18.9" },
  5. { "ProductCode": "JX00033", "ProductName": "Pen", "ProductPrice": "199.9" },
  6. { "ProductCode": "JX00034", "ProductName": "computer", "ProductPrice": "15000.5" }
  7. ]
  8. $("#FindProdcutDetail").click(function () {
  9. $.ajax({
  10. type: "Post",
  11. contentType: 'application/json',
  12. url: "/api/Default/PostParamToProducts",
  13. data: JSON.stringify(list_ProductDetail)
  14. })
  15. })
  16. })

result

Google Chrome 查看

4  数组作为参数传递


ajax

  1. $(document).ready(function () {
  2. var arr = ["a", "b", "c", "d"];
  3. $("#FindProdcutDetail").click(function () {
  4. $.ajax({
  5. type: "Post",
  6. contentType: 'application/json',
  7. url: "/api/Default/PostParamToProducts",
  8. data: JSON.stringify(arr)
  9. })
  10. })
  11. })

Result

我们用Google Chrome看看

5  小结


(1)Post参数传递本事是在Request-Body内传递,而Get参数传递本质是url拼接;

(2)Post参数传递不是key/value形式,而Get参数是key/value形式;

(3)Post传递参数时,无论是单个参数还是对象,均借助[FromBody]特性(当然,某些情况去掉[FromBody]特性也可把值传递进去,但未了规范化,尽量加上该特性);

(4)Post没长度限制,而Get有长度限制(一般为1024b);

(5)Post相对Get,较安全;

(6)Post操作相当于DB的Insert操作;

四  总结

1.虽然HTTP请求方法有20多种,常用的大致为4种,即Get,Post,Put,Delete(当然,像Trace,Head等也常用);

2.Get,Post,Put,Delete分别对应DB的Select,Insert,Update和Delete操作;

3.WebApi参数类型,大致分为基本数据类类型和对象数据类型(当然你也可以理解为抽象数据类型);

4.研究WebApi参数传递,只需研究Get和Post即可,因为其他http方法参数传递基本都是有这两种组合而成(如Put有Get和Post组合而成),或者相似(如Delete与Get相似);

5.对于控制器方法,尽量参照规范格式写,如在相应控制器方法上加上对应的htt请求(Get对应[HttpGet],Post对应[HttpPost]),方法名尽量采用“Http请类型+方法名”格式(如Get请求,建议采用Get+MethodName;Post请求对应Post+MethodName);

6.WebApi参数请求,大致分为两大类型,即Request-url和Request-body;

7.文中我们还简要分析了Get和Post区别;

8.关于如何设计一个良好的接口,在文章中,我们触及了一下,但未研究,会在后续的文章中单独分析;

五   服务区

有喜欢的朋友,可以看一下,不喜欢的的朋友,勿喷,谢谢!!

 

六   版权区

  • 感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少部分文章利用读书、参考、引用、抄袭、复制和粘贴等多种方式整合而成的,大部分为原创。
  • 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:2098469527@qq.com。
  • 可以转载该博客,但必须著名博客来源。

【WebApi系列】详解WebApi如何传递参数的更多相关文章

  1. QAction系列详解

    QAction系列详解 一.QAction类详解 [详细描述] QAction类提供了抽象的用户界面action,这些action可以被放置在窗口部件中.        应用程序可以通过菜单,工具栏按 ...

  2. Mysql常用show命令,show variables like xxx 详解,mysql运行时参数

    MySQL中有很多的基本命令,show命令也是其中之一,在很多使用者中对show命令的使用还容易产生混淆,本文汇集了show命令的众多用法. 详细: http://dev.mysql.com/doc/ ...

  3. MySQL系列详解八:MySQL多线程复制演示-技术流ken

    前言 Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有 ...

  4. 详解python函数的参数

    详解python函数的参数 一.参数的定义 1.函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号, 隔开 案列: ...

  5. iOS开发技巧系列---详解KVC(我告诉你KVC的一切)

    KVC(Key-value coding)键值编码,单看这个名字可能不太好理解.其实翻译一下就很简单了,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值.而不需 ...

  6. MySQL系列详解三:MySQL中各类日志详解-技术流ken

    前言 日志文件记录了MySQL数据库的各种类型的活动,MySQL数据库中常见的日志文件有 查询日志,慢查询日志,错误日志,二进制日志,中继日志 .下面分别对他们进行介绍. 查询日志 1.查看查询日志变 ...

  7. Vue系列:通过vue-router如何传递参数

    使用vue-router 来实现webapp的页面跳转,有时候需要传递参数,做法如下: 参考文献:http://router.vuejs.org/en/named.html  主要有以下几个步骤: ( ...

  8. MySQL系列详解六:MySQL主从复制/半同步演示-技术流ken

    前言 随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求.此时数据库集群就很好的解决了这个问题了.采用MySQL分布式集群,能够搭建一个高并发.负载均衡的集群服务器.在 ...

  9. OpenStack计费项目Cloudkitty系列详解(一)

    云计算是一种按需付费的服务模式,虽然OpenStack前期在计量方面走了些“弯路”,但现在的ceilometer.gnocchi.aodh.panko项目的稳步并进算是让其峰回路转.然而,目前来看Op ...

随机推荐

  1. Go 语言编写单元测试

    吾尝终日而思矣,不如须臾之所学也:吾尝跂而望矣,不如登高之博见也.登高而招,臂非加长也,而见者远:顺风而呼,声非加疾也,而闻者彰.假舆马者,非利足也,而致千里:假舟楫者,非能水也,而绝江河.君子生非异 ...

  2. 在ssh框架中service,action,jsp,formbeam,dao的调用顺序

    本文来自:http://blog.csdn.net/w_basketboy24/article/details/8642846 jsp发起请求. actionform封装请求参数. action接受请 ...

  3. 第一章:Python基础の快速认识基本语法

    本課主題 第一个 Hello World 程序实战 用户输入实战 模块介紹 变量介绍 格式化介紹 条件判断介紹和操作实战 for 循环介紹和操作实战 作业需求 Python 第一个 Hello Wor ...

  4. 第十六章:Python の Web开发基础(三) jQuery与Ajax

    本課主題 jQuery 介绍 Ajax 介绍 jQuery 介绍 选择器 jQuery 的选择器分不同的种类,主要目的是用来查找目标的 HTML 标签,方便对目标标签进行操作,比如找到 <li& ...

  5. Tsung测试Tcp协议的应用或接口

    利用Tsung模拟基于Tcp的业务流程,实属无奈.因ConnectManager部署在linux下,其中,Loadrunner的winsocket因不支持linux platform而无法使用,而Jm ...

  6. 常用Linux命令笔记

    任何脱离业务的架构都是耍流氓 只记录实际常用的Linux命令 常用Linux命令 查找安装路径: whereis nginx 查询nginx进程: ps aux|grep nginx 查看 CentO ...

  7. Unity3d 动态加载场景物件与缓存池的使用

    聊聊Unity3d动态加载场景物件那些事儿. 众所周知,在策划或美术设计完游戏场景地图后,一个场景中可能会存在成千上万个小的物件,比如石头,木箱子,油桶,栅栏等等等等,这些物件并不是游戏中的道具,仅仅 ...

  8. 6.while loop

    while 循环   有时候我们不确定需要循环几次.就像一个司机不知道自己需要什么时候加油一样.程序可以这样写:   while petrol_filling: increase price show ...

  9. java数据结构与算法(一)

    1.数据结构概念 所谓的数据结构是数据之间的关系,都是为了提高程序效率而设计的. 分为逻辑关系和物理关系两种. 逻辑关系:人为的一种逻辑思维的认为. (1)集合:在一个范围内有多个数据,数据之间没有关 ...

  10. [PHP] PHP服务器接口SAPI中的结构体

    SAPI:在各个服务器抽象层之间遵守着相同的约定,这里我们称之为SAPI接口.例如命令行程序的实现,Apache的mod_php模块实现以及fastcgi的实现等等 1.结构体:使用结构体(Struc ...