类Restful接口设计规范

前端之家收集整理的这篇文章主要介绍了类Restful接口设计规范前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. -- 引言 --
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8. Restful是一种非常优美的http接口设计风格及设计规范。使用restful原理来设计接口,可以非常显著地降低多个系统之间的耦合性,也可以使得接口变得非常一致,不仅美观,而且容易理解和上手。
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15. 然而在实际工作中,似乎很难真正用上完全的Restful,理想和现实总是有差距的- -
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22. 通过不断地实践归纳,结合restful的核心原理,我小结出了一套类Restful接口规范。它基本上解决了我在项目中遇到的90%的问题,自我感觉良好,哈哈。
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35. -- 正文 --
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42. == 请求/响应规范 ==
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55. 请求
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62. GET: 使用url传参,如:?a=1&b=2
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69. POST: 使用Json传参,从request.body获取Json,如:'{"a": 1,"b": 2}'
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82. 响应
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89. 返回值格式为json,分为成功返回(ok_json)和失败返回(fail_json
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102. ok_json示例:
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109. {"ok": True,data: {"user_id": 1},"echo": "","error": "","reason": ""}
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122. fail_json示例:
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129. {"ok": False,data: {},"echo": "COMM_INVALID_ARGS","error": "1001","reason": "请求参数错误"}
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148. == 接口规范 ==
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155. 假设我们的数据模型叫做“User
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162. 注意:
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169. 1、以下接口中的“返回值”均为请求成功时的返回值,存在ok_json中的data
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176. 2、在参数前面加上:的(如:user_id),说明此参数非必须;在参数前面加*的(如*user_id),说明此参数必须
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183. 3、列表返回值的结果,默认使用id逆序排序,即新建的数据在前。如果你在数据模型中自己定义了display_order,你就使用你的order进行排序
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. 【新增】/user/add/
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209. 【请求方式】POST
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216. 【描述】提供新建一个User对象所需要的所有属性,新建成功后,将新建数据的id返回
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223. 【参数】新建user所需要的所有参数,依据业务不同有所不同
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230. 【返回值】:{"id": 3}
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249. 【更新】/user/update/
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256. 【请求方式】POST
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263. 【描述】根据提供的id更新对应记录的属性
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270. 【参数】*user_id,*其他待更新的属性值(不包括删除标记
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277. 【返回值】{}
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296. 【查看】/user/view/
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303. 【请求方式】GET
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310. 【描述】提供记录id,返回对象的json化数据
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317. 【参数】*user_id
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324. 【返回值】{"id": "1","username": "swpu-lee","real_name": "lee","gender": 0,...}
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343. 删除】/user/delete/
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350. 【请求方式】GET
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357. 【描述】删除一条数据。在我的实际项目中,往往只是对记录标记以下is_deletedTrue。对于所有查询接口来说,被标记is_deleted的数据都应该查不到(也就是说这些接口在做数据查询时都要加上is_deletedFalse”这个条件)
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364. 【参数】*user_id
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371. 【返回值】{}
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390. 查询】/user/query/
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397. 【请求方式】GET
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404. 【描述】获得满足指定过滤条件的数据,这个接口返回满足条件记录的id列表。此接口与实际使用相关,需要自己定义一个查询协议。
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411. 【参数】依据实际需求有所不同,如:{"age": "11-20","eye_color": "red",...}
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418. 【返回值】[1,2,3,5,78,121,...]
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437. 【批量查看】/user/view/bulk/
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444. 【请求方式】GET
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451. 【描述】根据提供的ids批量查看数据。此接口可以配合Query接口进行批量查看
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458. 【参数】*user_ids(格式为:"1,4,5",用逗号隔开)
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465. 【返回值】{"1": {用户1的数据},"2": {用户2的数据},"3": {用户3的数据},...}
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484. ### 以下两个接口在这个user的例子中,不是很好体现这个接口的价值,所以我改用“用户相册”的例子
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491. 【列表】/photo/album/list/
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498. 【请求方式】GET
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505. 【描述】查看照片列表,当请求参数中有user_id时,获得指定用户的相册的列表,否则返回全体用户的相册列表。另外此接口需要返回记录总数,这样可以供其他应用做分页使用
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512. 【参数】:user_id默认为None,:offset默认0,:limit默认20,返回数据的json列表以及总数据量
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519. 【返回值】{"total_count": 101,"list": [{相册1},{相册2},{相册3},...]}
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538. 【全部】/phtot/album/all/
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545. 【请求方式】GET
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552. 【描述】返回指定用户的所有相册
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559. 【参数】*user_id
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566. 【返回值】[{相册1},...]
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591. -- 结束语 --
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598. 不是每一个接口都必须存在于每一个项目,具体需要哪些接口,根据实际业务需求来添加
  599.  
  600.  
  601.  
  602.  
  603.  
  604.  
  605. 此种规范的提供的操作全是原子级别的操作,当你要实现某个复杂的需求时,可以通过组合这几个接口实现你需要的功能
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612. 以上规范并不能解决开发过程中的全部问题(比如密码检查接口,你不可能在数据库中存明文密码吧?)。我的建议是,在遇到问题时,应优先使用这些接口来解决你的问题,不能解决时再考虑开发特殊接口处理。

猜你在找的设计模式相关文章