0.9.13 • Published 7 years ago

jsoc v0.9.13

Weekly downloads
-
License
ISC
Repository
-
Last release
7 years ago

JSOC

npm.io

  • Getting start

    	- first , [star](https://github.com/captainblue2013/jsoc) this  repositorie
    
    	- install dependencies
    		
    			npm install jsoc -g
    
    	- Is that OK?
    
    			jsoc -v
  • jsoc entity

    	> jsoc entity 是描述一个字段属性的一种方式。
    
    	在这里,字段被一系列属性来描述,比如:
    
    	`_type`,`_length`,`_required` 等等,我们将在附录里完整地罗列出这些属性。
    	要很好地使用 `jsoc`,需要充分熟悉每个属性的作用。
    
    	为此,你可能要花10分钟来浏览一下 [附录b](#b--jsoc-entity-深入) 。
    
    	你并不需要立刻就熟记这些内容,现阶段,我们只要看一个例子就够了
    
    		username : {
    			_type: 'string',
    			_required: true,
    			_from: 'username',
    			_default: 'Tom'
    		}
    
    	上面的例子表示,username 这个字段,是一个 `string`类型,并且是`必须`的,
    	它的值可以从暂存区加载([什么是暂存区?](#)), 当暂存区无法提供时,默认值为`Tom` 。
  • jsoc comment

    	> jsoc comment 是我们代码里注释的一种写法,用来描述一个接口
    
    	我们看一下这段注释:
    
    		/**
    		 * @jsoc.host http://127.0.0.1:3001
    		 */
    	
    		/**
    		 * @jsoc
    		 *   name:api1
    		 *   desc:a demo doc
    		 *   group:test
    		 *   request
    		 *     method:get
    		 *     uri:/demo/{id}
    		 *     params
    		 *       id
    		 *         _type:number
    		 *         _required:true
    		 *     query
    		 *       page
    		 *         _from:pageNum
    		 *         _type:number
    		 *         _default:1
    		 *   response
    		 *     body
    		 *       code
    		 *         _type:number
    		 *         _assert:200
    		 *       data
    		 *         _type:object
    		 *       message
    		 *         _type:string
    		 *         _required:false
    		 */
    
    	第一段注释,直观地表名这套接口的`host`地址。
    
    	重点在第二段,这是描述一个接口的模板,通过缩进2空格来表达层级关系,
    
    	我们逐行解构一下:
    	- @jsoc
    
    			开始标记,表明这是一段 jsoc comment
    	- name:api1
    	
    			这是接口名字 , api1
    	- desc: a demo doc
    	
    			描述,简要描述接口的作用
    	- group:test
    
    			接口分组,后续会支持这个功能,暂时没啥用
    	- request
    
    			注意 ! request后面什么都没有,并且从下一行开始多了一级缩进,
    			这里表示request是个对象。
    	- method:get
    
    			这个接口使用的http方法
    	- uri:/demo/{id}
    		
    			表达了接口的 uri ,这里可以支持占位符({id}),
    	- params ...
    
    			params
    			  id
    			    _type:number
    			    _required:true
    			这里又是利用缩进来表达层次关系,
    			表示params这个对象,包含一个 id 属性,
    			id 是必填参数,类型为 number
    		
    			我们可以通过一个json对象来理解这一段注释:
    			params:{
    				id:{
    					_type:'number',
    					_required:true
    				}
    			}
    		
    			P.S. params和uri的关系?就是params描述了uri里的占位符 。
    	- query , headers , body 
    
    			基本和params一个模式,分别表示http请求中的几个关键,但并不是都必须的。
    			一个足够简单的接口,甚至只有 method 、 uri 就够了
    	- response
    
    			和request对应的,这个是用来描述返回信息的。
    			headers并不是必须,但是body是需要的。
    			从上面这个例子里,我们这个接口可能会返回一下数据
    			{
    				code:200,
    				data:{},
    				message:'success'
    			}
    	- jsoc entity 的深层嵌套
    
    			jsoc entity是支持嵌套的,
    			比如上面的data字段,你可以只表明它是一个 object.
    			又或者你可以更进一步描述这个object内部结构:
    			code
    		      _type:number
    		      _assert:200
    	        data
    		       name
    		         _type:string
    		       age
    		         _type:number
    		       address
    		         _type:string
    		    message:
    		      _type:string
    		      _required:false
    	 	
    		 	像这样,我们就能够描述data里面的结构,理论上是支持无限等次的。
  • jsoc document(markdown)

    	当我们写好 `jsoc comment` ,我们可以通过简单的命令生成一份 `markdown`格式的接口文档。
    
    	Step 1 : 生成接口json描述文件
    	
    		jsoc -g {path_of_comment} -o {output_file}
    	
    		path_of_comment 是你编写jsoc comment的文件,也可以是一个目录。
    	
    		output_file 生成的文件名
    	
    		例子:
    		jsoc -g route_demo/demo.js -o demo.js
    		将会在 {jsoc_home}/plans/ 下生成一个 demo.js文件,
    		生成的是一个标准 node module 。
    
    	Step 2 : 生成md文档文件
    
    		jsoc -m demo
    		这里的 demo 指的是plans目录下的文件名(不含 .js )
    		以上命令自动在 plans 目录生成一份 demo.md 文件。
    		(暂不支持指定目录)
  • jsoc mock

    	json描述文件是`jsoc`很重要的部分,通过 `jsoc --gen `生成以后,
    	就能使用其他`jsoc`功能,比如 mock 。
    
    	假设你已经顺利生成 `plans/demo.js` ,否则请看前面章节。
    
    	执行命令:
    
    		jsoc --mock demo
    	
    	如果`mock`成功,将会看到看到
    
    		Mock in demo
    		listen on port:3001,ip:null
    		.
    		.   <------ nobody care about this point!!
    
    	此时打开浏览器,尝试访问 
    
    	`http://127.0.0.1:3001/demo/1` (前面章节定义的接口)
    
    	深入学习 `jsoc entity` 描述,可以定制出更加丰富的返回格式,
    	在`mock`中就能模拟出更加复杂的数据。
  • jsoc test

    	`jsoc`有一个激动人心的功能,可以测试在线接口,这是`jsoc`最精髓部分。
    
    	前面我们定义 `demo` 的时候,有一个`jsoc.host`,
    	如果我们正确地输入一个正在运行的线上地址,比如 `http://mydomain.com`。
    
    	那么我们可以使用一套`jsoc`命令来自动构建请求,测试接口的正确性。
    
    	基本用法
    	
    		jsoc {planName} [option]
    	以`demo`为例:
    
    	列出 demo 的全部接口
    
    		jsoc demo -l     
    	查看某个接口的描述
    
    		jsoc demo -a api1 -i
    	构造`http`请求测试某个接口
    
    		jsoc demo -a api1 [-b]
    	
    		执行结果:
    		测试接口:[api1]
    		{

    code : true data : true } 表示返回结果的code和data都符合预期。

    		如果你想看到这个请求的详细信息,可以加上 -b 参数,将会打印请求体和返回体。
  • 附录

A . jsoc test进阶用法

这一节我们详细说说 jsoc test的各种参数。

基本格式: jsoc demo [options]

  • -l / --list

    		返回一个数组,列出demo所有的接口。
  • -a / --api

    		指定测试的接口名,
  • -b / --body

    		打印请求、返回的详细信息。
  • -d / --data

    		注入数据的方式,举个例子,比如前面 demo 里的query
    		query
    		  page
    		    _from:pageNum
    		    _type:number
    		    _default:1
        
    	    你可以用  jsoc demo -a api1 -d.pageNum 2 来注入page的值,
    	    如果你不这么做,page就是默认值 1 。
        
    	    -d 支持另一种格式,要求是标准的json字符串,书写比较麻烦
    	    jsoc demo -a api1 -d '{"pageNum":2}'
        
    	    如果需要注入多个参数,除了使用json字符串,第一种方式也是可以的
    	    jsoc demo -a api1 -d.pageNum 2 -d.other 3 -d.more 4
        
  • 一次性测试多个接口

    		如果忽略 -a 参数,会默认按照你书写的顺序全部接口测试一遍。
    		jsoc demo
    		测试接口:[api1]
    	    测试接口:[api2]
    	    测试接口:[api3]
    	    ... 
        
        
    	    有时我们并不希望这样,我们希望自行决定测试哪些接口,自行决定调用顺序。
        
    	    万幸,-a 是支持多个接口的,下面是例子
        
    	    jsoc ucenterApi -a create,auth,getProfile
        
    	    将会按照create,auth,getProfile的顺序进行测试
    	  ![](http://lanhao.name/img/upload/jsoc_01.png)
        

B . jsoc entity 深入

下面详解一下jsoc entity每个描述带来 (未完)

0.9.13

7 years ago

0.9.11

7 years ago

0.9.10

7 years ago

0.9.8

7 years ago

0.9.7

8 years ago

0.9.6

8 years ago

0.9.5

8 years ago

0.9.4

8 years ago

0.9.3

8 years ago

0.9.2

8 years ago

0.9.1

8 years ago