Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
»ùÓÚ Swagger µÄǰºó¶Ë·ÖÀ뿪·¢Êµ¼ù
 
  3087  次浏览      29
 2019-2-26  
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚibm£¬Ö÷Òª½²½âÁËSwaggerÊÇʲô¼°°²×°£¬Ê¹Óð¸Àý½²½âÔõôӦÓ㬸ü¶àÄÚÈÝÇë¿´ÏÂÎÄ¡£

ǰÑÔ

ǰºó¶Ë·ÖÀ뿪·¢ÒѾ­ÊǺÜÁ÷ÐеÄÒ»¸ö¿ª·¢Ä£Ê½¡£Ç°¶Ë¿ª·¢²»ÐèÒª²¿Êðºó¶ËÓïÑԵĻ·¾³£¬ºó¶Ë¿ª·¢Ò²²»ÐèҪǰ¶ËдºÃµÄÈκγÌÐò¡£ºó¶ËÖ»¹Ü±©Â¶¸÷ÖÖ API ½Ó¿Ú¹©¸øÇ°¶Ë½øÐÐÊý¾ÝµÄÔö¡¢É¾¡¢¸Ä¡¢²é£¬²»¸ºÔðÉú³É HTML Ò³Ãæ£¬ÕâÖÖ·½Ê½Äܹ»¼õÇáºó¶ËÈÎÎñÈúó¶Ë¿ª·¢¸ü¼Óרע¡£ÓÈÆäÊÇÔÚ΢·þÎñµÄ¿ª·¢¿ò¼ÜÏÂ, ǰºó¶Ë·ÖÀ뿪·¢µÄģʽӦÓøü¼Ó¹ã·º¡£±¾ÆªÒàÊÇÔÚ΢·þÎñµÄ¿ª·¢¿ò¼ÜϵÄʵ¼ù×ܽᡣ

ÔÚ΢·þÎñ¿ª·¢¿ò¼ÜÏ£¬Ç°¶Ëͨ³£±»Éè¼Æ³ÉÒ»¸ö¶ÀÁ¢µÄ΢·þÎñ¡£Ç°ºó¶Ë½ö½öͨ¹ý½Ó¿ÚÀ´Ð­×÷£¬Ç°¶Ë·þÎñ×îÖÕÉú³ÉÒ»¸ö¶ÀÁ¢µÄ Docker ¾µÏñÀ´²¿Êð¡£ÔÚ²úÆ·µÄºËÐÄ΢·þÎñ¶¨ÒåÍê³Éºó£¬ÎÒÃÇÏ£Íûǰºó¶Ë Service ͬʱ¿ªÊ¼¿ª·¢£¬ËùÒÔÕâÀïÎÒÃÇÀûÓà Swagger ´´½¨ÁËÒ»¸ö»ùÓÚ Node.js µÄ Mock Server ×÷Ϊǰºó¶Ë·ÖÀ뿪·¢µÄ¹¤¾ß¡£ÔÚºó¶Ë·þÎñûÓÐÍêȫʵÏÖµÄÇé¿öÏÂ, ʹÓà Mock Server ×÷Ϊǰ¶Ë¿ª·¢µÄÖ§³Ö¹¤¾ß, À´ÊµÏÖǰºó¶Ëͬʱ¿ª·¢µÄÄ¿µÄ¡£

Swagger ×ÛÊö

Swagger ÊÇÒ»¸ö¼òµ¥µ«¹¦ÄÜÇ¿´óµÄ API Éè¼Æ±í´ï¹¤¾ß¡£Ä¿Ç°¼¸ºõËùÓеıà³ÌÓïÑÔ£¬¶¼ÄÜÖ§³Ö Swagger¡£Swagger °üÀ¨¿â¡¢±à¼­Æ÷¡¢´úÂëÉú³ÉÆ÷µÈºÜ¶à²¿·Ö£¬ÕâÀïÎÒÃÇÖ÷ÒªÓõ½ÁË Swagger Editor¡£Swagger ¿ÉÒÔÑ¡ÔñʹÓà JSON »òÕß YAML µÄÓïÑÔ¸ñʽÀ´±àд API Îĵµ¡£ÎÒÃÇ¿ÉÒÔÓÃÈκÎÎĵµ±à¼­Æ÷À´±àд Swagger API Îĵµ£¬Ò²¿ÉÒÔÑ¡ÔñʹÓà Swagger Editor¡£Swagger Editor Äܹ»ÌṩÓï·¨¸ßÁÁ¡¢×Ô¶¯Íê³É¡¢¼´Ê±Ô¤ÀÀµÈ¹¦ÄÜ£¬·Ç³£Ç¿´ó¡£Èçͼ 1 չʾµÄ±à¼­¹¦ÄÜ£¬µ±ÎÒÃÇÐÞ¸ÄÁË API µÄ¶¨ÒåÖ®ºó£¬Ôڱ༭Æ÷ÓÒ²à¾Í¿ÉÒÔ¿´µ½ÏàÓ¦µÄ API ÎĵµÁË¡£

ͼ 1. Swagger Editor ±à¼­Æ÷

ÎÒÃÇ¿ÉÒÔʹÓÃÔÚÏß°æ±¾À´±à¼­£¬Ò²¿ÉÒԷdz£¼òµ¥µØ²¿Êð±¾µØµÄ Swagger Editor£¬²¿Êðϸ½ÚÇë²Î¿¼https://swagger.io/tools/swagger-editor/¡£Swagger Editor ²»½öÄܱܺã½ÝµØÉú³É API Îĵµ£¬Ëü»¹Äܹ»×Ô¶¯Éú³É Mock Server ËùÐèÒªµÄ´úÂë¡£¶ø±¾ÎÄʵ¼ù²ÉÓõÄÊÇÆäËûÉú³É Mock Server µÄ·½·¨£¬ËùÒÔ´Ë´¦¾Í²»¶Ô×Ô¶¯Éú³É Mock Server ´úÂë¶à×ö½éÉÜÁË¡£

±àд Swagger API Îĵµ

Swagger API Îĵµ×ñÑ­ OpenAPI Îĵµ¶¨Òå±ê×¼¡£ÎĵµÄÚÈÝʹÓà key:value µÄ¸ñʽ¡£

µ±Ç°ºó¶Ë¹²Í¬¶¨ÒåºÃ API ½Ó¿Úºó, ÎÒÃǾͿÉÒÔÀûÓà Swagger Editor »òÕ߯äËû±à¼­Æ÷½« API ÎĵµÐ´³öÀ´¡£±ÈÈçÎÒÃÇÏ£Íû Mock Server µÄÃû×ÖÊÇ Docs API£¬host Ϊ localhost£¬¶Ë¿Ú 10010£¬ËùÓÐ API µÄ¹²Í¬Ç°Ö÷¾¶Îª /docs¡£ÆäÖÐÒ»¸ö Rest API ¶¨ÒåΪ£º

URL: /docs/note
Request:
Method: Get
Parameter: note
Type: string
In: path
Required: true
Respond:
200: Return success message
500: Return error message

 

ÒÀ¾ÝÉÏÃæµÄÐèÇóÎÒÃÇ¿ªÊ¼±àд API Îĵµ£¬Swagger Îĵµ´óÖ¿ÉÒÔ·ÖΪÒÔÏÂËĸö´óµÄ²¿·Ö£º

Swagger API °æ±¾¡£Ä¿Ç° OpenAPI ×îÐÂÒѾ­µ½ 3.0.1 °æ±¾¡£±¾ÎÄʵ¼ù²ÉÓà 2.0 °æ±¾¡£

»ù±¾¶¨Òå¡£°üÀ¨ Info Object£¬Server Object µÈµÈ£¬¸ù¾Ý²úÆ·µÄÐèÒªÌí¼ÓÏàÓ¦µÄ¶¨Òå¡£¾ßÌå´úÂë²Î¿¼Çåµ¥ 1£º

Çåµ¥ 1. API Îĵµ»ù±¾¶¨Òå

info:
version: "0.0.1"
title: Docs API
host: localhost:10010
basePath: /docs
schemes:
- http
- https
consumes:
- application/json
produces:
- application/json
- text/html

 

Paths Ä£¿é¡£°üÀ¨ Path Item Object£¬Operation Object µÈµÈ£¬Ã¿Ò»¸ö¾ßÌåµÄ Rest API ÇëÇóÐèÒªÒ»¸ö Path Item Object¡£¸ù¾Ý²úÆ·µÄÐèÒªÌí¼ÓÏàÓ¦µÄ¶¨Òå¡£¶ÔÓ¦ API URL /docs/note, ¾ßÌå Path ¶¨Òå´úÂë²Î¿¼Çåµ¥ 2£º

Çåµ¥ 2. API Îĵµ Paths Ä£¿é

paths:
/{filename}:
get:
description: Returns note special resource to the caller
parameters:
- name: filename
in: path
description: resource name
required: true
type: string
responses:
"200":
description: Success
schema:
required:
- message
properties:
message:
type: string
# responses may fall through to errors
default:
description: Error
schema:
required:
- message
properties:
message:
type: string

 

Definitions Ä£¿é¡£¸´ÔÓ Object »òÕß¹«Óà Object µÄ¶¨Òå¿ÉÒÔдÔÚ Definitions Ä£¿é£¬ÕâÑù¿ÉÒÔÔöÇ¿ API ÎĵµµÄ¿É¶ÁÐÔ¡£±ÈÈçÎÒÃÇ¿ÉÒÔ°Ñ response ÖÐ 200 ºÍ 500 µÄ¶¨Òå³éÈ¡³öÀ´£¬¶¨Òå 2 ¸ö definitions£¬È»ºóÐÞ¸Ä Path ¶ÔÓ¦²¿·ÖµÄ´úÂë¡£¾ßÌå´úÂë²Î¿¼Çåµ¥ 3£º

Çåµ¥ 3. API Îĵµ Definitions Ä£¿é

definitions:
GeneralResponse:
required:
- message
properties:
message:
type: string
ErrorResponse:
required:
- message
properties:
message:
type: string
¡­¡­

/{filename}:
get:
¡­
responses:
"200":
description: Success
schema:
# a pointer to a definition
$ref: "#/definitions/GeneralResponse"
# responses may fall through to errors
default:
description: Error
schema:
$ref: "#/definitions/ErrorResponse"

 

Open API Ö§³ÖµÄÄÚÈÝ»¹Óкܶ࣬´Ë´¦Ö»½éÉÜºÍ Mock Server Ïà¹ØµÄ²¿·Ö£¬ÆäËû API Îĵµ±àдÇë²ÎÕÕhttps://swagger.io/specification/¡£

¹¹½¨ Mock Server

ǰºó¶Ë·ÖÀëµÄģʽÏÂ, ǰºó¶Ë¿ª·¢ÈËÔ±×îÏÈ×öµÄÊÂÇéÊǶ¨Òåǰºó¶ËͨѶµÄ API ½Ó¿ÚÎĵµ¡£µ«ÊÇÔÚÖ»ÓÐ API ½Ó¿ÚÎĵµ£¬¶øºó¶Ë·þÎñûÓпª·¢Íê³ÉµÄʱºò£¬Ç°¶ËÈçºÎ¿ªÊ¼¿ª·¢ÄØ£¿ÎÒÃǵÄ×ö·¨ÊÇÀûÓà Swagger API Îĵµ£¬¿ª·¢Ò»¸ö¼òµ¥µÄ Mock Server ¸øÇ°¶ËÓ¦ÓÃʹÓá£

ÎÒÃÇʹÓà swagger-express-mw lib °üÀ´´´½¨»ùÓÚ Node.js µÄ Mock Server£¬swagger-express-mw Ìá¹²Ò»¸öǰ¶Ë»ù´¡¿ò¼Ü£¬Õâ¸ö¿ò¼ÜÍêÈ«¿ÉÒÔ×÷Ϊǰ¶Ë´úÂëµÄ¿ª·¢¿ò¼Ü£¬½« controller ²¿·ÖʵÏÖ³ÉÕæÕýÏîÄ¿µÄ´úÂëÂß¼­¡£ÒòΪÎÒÃǵÄÏîÄ¿ÊÇÖØ¹¹£¬Ç°¶Ë´úÂëÐèÔÚÔ­ÓдúÂë»ù´¡ÉÏ×ö¿ª·¢£¬ÖصãÖØ¹¹ºó¶Ë´úÂë¡£ËùÒÔÖ»ÓÃÆä×÷Ϊ Mock Server À´²âÊÔǰºó¶ËµÄͨÐÅ£¬controller ²¿·ÖµÄʵÏÖÖ»ÊǼòµ¥µÄ·µ»Ø Rest API ÐèÒªµÄ¹Ì¶¨µÄÊý¾Ý¡£

³ýÁËÄ£Äâ Rest API ÏìÓ¦£¬ÎÒÃÇ»¹¿ÉÒÔÀ©Õ¹ Mock Server ÌṩµÄ¹¦ÄÜ£¬±ÈÈç¼ÓÔØÔËÐÐǰ¶Ë JavaScript ÎļþµÄ¹¦ÄÜ£¬ÏìÓ¦ HTTPS ÇëÇó£¬Ìṩ Proxy Server µÄ¹¦ÄÜ£¬µ±ºó¶ËÍê³ÉÏàÓ¦µÄ API ¿ª·¢ºó£¬Mock Server ¿ÉÒÔ½«Ö¸¶¨ API ÇëÇóת·¢µ½ÕæÕýµÄºó¶Ë Service ·þÎñÆ÷ÉÏ¡£ÕâÑù¾Í¿ÉÒÔËæÊ±²âÊÔºó¶ËÐÂʵÏÖµÄ Rest API¡£

ÏÂÃæÈÃÎÒÃÇÀ´¿ªÊ¼´´½¨ Mock Server£¬ÒÔϰ²×°Æô¶¯ÃüÁîÈ«²¿»ùÓÚ Windows ƽ̨¡£

°²×°

°²×° Node.js¡£Swagger ¹¤³ÌÊÇ»ùÓÚ Node.js µÄ£¬ËùÒÔÐèÒªÊ×ÏȰ²×° Node.js¡£¹ØÓÚ Node.js ϸ½ÚÇë²ÎÕÕhttps://nodejs.org/en/¡£

°²×° npm¡£ÔÚ Windows ƽ̨ÉÏ£¬°²×° Node.js µÄͬʱ¾Í»á°²×° npm£¬ÎÞÐëµ¥¶À°²×°¡£¹ØÓÚ npm ϸ½ÚÇë²ÎÕÕhttps://www.npmjs.com/¡£

°²×° Swagger¡£ÔËÐÐÒÔÏÂÃüÁî°²×° Swagger£º

# npm install -g swagger

°²×°ÃüÁîÖ´ÐÐÍê³Éºó£¬¿ÉÒÔÔËÐÐÒÔÏÂÃüÁîÀ´È·¶¨ Swagger ÊÇ·ñ°²×°³É¹¦£º

# swagger -V

´´½¨¹¤³Ì

ÔËÐÐÒÔÏÂÃüÁ´´½¨ Mock Server ¹¤³Ì£º

# swagger project create YourProjectName

Ñ¡ÔñÒª´´½¨µÄ¹¤³ÌµÄ¼Ü¹¹£¬±ÈÈç express£¬¾ßÌåÇë²Î¿¼Çåµ¥ 4£º

Çåµ¥ 4. ´´½¨¹¤³Ì

D:\innovation>swagger project create SwaggerProject
? Framework? express
Project SwaggerProject created in D:\innovation\SwaggerProject
Running "npm install"...
npm
notice created a lockfile as package-lock.json. You should commit this file.

added 223 packages in 9.305s

Success! You may start your new app by running: "swagger project start SwaggerPr
oject"

¹¤³ÌĿ¼½éÉÜ

½øÈ빤³Ì¸ùĿ¼£¬ÎÒÃÇ¿ÉÒÔ¿´µ½¹¤³Ì½á¹¹Èçͼ 2£º

ͼ 2. ¹¤³ÌĿ¼

api Îļþ¼Ð£ºÕâÀïÓÖ°üº¬ controllers£¬helpers£¬mocks ºÍ swagger ËĸöÎļþ¼Ð¡£ÆäÖÐ controllers ÓÃÀ´·ÅÖÃÏìÓ¦ API ÇëÇóµÄ controller Îļþ£»ÁíÍâ swagger ÓÃÀ´·ÅÖà API Îĵµ swagger.yaml Îļþ¡£ÕâÁ½¸öÊÇ Mock Server Óõ½µÄÒ²ÊDz»¿ÉȱÉٵIJ¿·Ö¡£

config Îļþ¼Ð£ºÕâÀïÓÐĬÈÏ´´½¨µÄ default.yaml Îļþ¡£Õâ¸öÎļþÊÇ Mock Server µÄĬÈÏÅäÖÃÎļþ£¬±ÈÈçÕâÀﶨÒå Mock Server È¥ÄÄÀïÕÒ API ÎļþµÈµÈ£¬½ö½öÀûÓù¤³Ì×ö Mock Server µÄ»°£¬ÎÒÃDz»ÐèÒª¸Ä¶¯Õâ¸öÅäÖÃÎļþ¡£Í¬Ê±ÄãÒ²¿ÉÒÔ½«×Ô¼ºµÄÅäÖÃÎļþ·ÅÔÚÕâÀï¡£

test Îļþ¼Ð£ºÕâÀï°üº¬ api/contollers ºÍ api/helpers¡£ÕâÀïÊÇ API Îļþ¼Ð¶ÔÓ¦µÄ²âÊÔÎļþ¡£

app.js£ºMock Server µÄÆô¶¯Îļþ¡£ÎÒÃÇ¿ÉÒÔ¸ù¾Ý×Ô¼ºÏîÄ¿µÄÐèÇó£¬ÔÚÕâ¸öÎļþÀïÌí¼Ó´úÂëÔö¼Ó Mock Server µÄ¹¦ÄÜ¡£

Æô¶¯¹¤³Ì

ÃüÁîÐÐÇл»µ½¹¤³Ì¸ùĿ¼Ï£¬ÔËÐÐÒÔÏÂÃüÁÔËÐнá¹ûÈçÇåµ¥ 5¡£

# swagger project start

¹¤³ÌÕýÈ·Æô¶¯ºó»áÌáʾÎÒÃdz¢ÊÔ´ò¿ªÁ´½Ó£ºhttp://127.0.0.1:10010/hello?name=Scott¡£Õâ¸öÁ´½ÓÊǹ¤³ÌĬÈÏ´øµÄÒ»¸öÀý×Ó£¬ÎÒÃÇ¿ÉÒÔÔÚ api/swagger/swagger.yaml ÎļþÖÐÕÒµ½Õâ¸ö API ÇëÇóµÄ¶¨Ò壬ÒÔ¼°ÏìÓ¦Õâ¸öÇëÇóµÄ controller¡£

Çåµ¥ 5. Æô¶¯¹¤³Ì

D:\innovation\SwaggerProject>swagger project start
Starting: D:\innovation\SwaggerProject\app.js...
project started here: http://localhost:10010/
project will restart on changes.
to restart at any time, enter `rs`
try this:
curl http://127.0.0.1:10010/hello?name=Scott

±à¼­ API Îĵµ

¹¤³ÌÖ§³ÖÔÚä¯ÀÀÆ÷ÖÐÏÔʾ¡¢±à¼­¡¢±£´æ¡¢²âÊÔ api/swagger/swagger.yaml Îĵµ¡£¾ßÌå²½ÖèÈçÏ£º

1. Ê×ÏÈÆô¶¯ÔÚÏ߱༭Æ÷¡£´ò¿ªÒ»¸öеÄÃüÁîÐд°¿Ú£¬ÔËÐÐÃüÁî: # swagger project Edit£¬ÔËÐнá¹ûÈçÇåµ¥ 6¡£¹¤³ÌĬÈÏ´´½¨µÄ swagger.yaml Îļþ»áÔÚä¯ÀÀÆ÷ÖÐÏÔʾ£¬½á¹ûÈçͼ 3¡£

Çåµ¥ 6. ±à¼­ API ÎĵµÃüÁî

D:\innovation\SwaggerProject>swagger project edit
Starting Swagger Editor.
Opening browser to: http://127.0.0.1:49965/#/edit
Do not terminate this process or close this window until finished editing.

 

ͼ 3. ÔÚÏ߱༭ API Îĵµ

2. ÔÚä¯ÀÀÆ÷Àï±à¼­ YAML Îļþ¡£¹¤³ÌÖ§³ÖÔÚä¯ÀÀÆ÷ÖÐÖ±½ÓÐÞ¸Ä API Îĵµ£¬Ð޸ĵÄÖµ»áÖ±½Ó±£´æµ½ api/swagger/swagger.yaml ÎļþÖС£ÎÒÃÇ¿ÉÒÔ½«×Ô¼ºÏîÄ¿µÄ Swagger API Îĵµ±£´æ³É YAML ¸ñʽ¸üе½ Mock Server ÖС£YAML Îļþ±à¼­¹ýºó£¬¹¤³Ì»á×Ô¶¯¼ÓÔØ×îÐ嵀 API Îĵµ¡£

3. Ìí¼Ó¹Ø¼ü´Êµ½ API Îĵµ¡£µ± API ÇëÇó±» Mock Server À¹½Øºó£¬Server ͨ¹ý¶ÁÈ¡ swagger.yaml ÎļþÖÐÖ¸¶¨µÄ¹Ø¼ü´ÊµÄÖµÀ´¾ö¶¨½ÓÏÂÀ´Òª×öºÎÏìÓ¦¡£³ýÁ˶¨Òå API ÐèÒªµÄ¹Ø¼ü´ÊÍ⣬ÎÒÃÇ»¹ÐèÒªÔÚÿ¸ö Path ¶¨ÒåÖмÓÈëÒÔÏÂÁ½¸ö¹Ø¼ü´Ê£¬À´Ö¸¶¨Ã¿¸ö API µÄ controller ºÍ function¡£¾ßÌå´úÂëÇë²Î¿¼Çåµ¥ 7¡£

x-swagger-router-controller£ºÕâ¸öÖµÐèÒªÉèÖóÉÏìÓ¦ API ÇëÇóµÄ controller ÎļþµÄÃû×Ö¡£±ÈÈç controller ÎļþΪ hello_world.js£¬ ÄÇô¹Ø¼ü´ÊµÄÖµ¾ÍÊÇ hello_world¡£

operationId£ºÕâ¸öÖµÐèÒªÉèÖóÉÏìÓ¦ API ÇëÇóµÄ controller ÎļþÖÐÏàÓ¦µÄ·½·¨¡£

Çåµ¥ 7. ±à¼­ YAML Îĵµ

/hello:
# binds a127 app logic to a route
x-swagger-router-controller: hello_world
get:
description: Returns 'Hello' to the caller
# used as the method name of the controller
operationId: hello

 

4. ²âÊÔ API Îĵµ¡£API Îĵµ±à¼­Íê³Éºó£¬ÎÒÃÇ¿ÉÒÔÖ±½ÓÔÚä¯ÀÀÆ÷µÄÓÒ²àÌí¼Ó²ÎÊýÏò Mock Server ·¢ËÍ API ÇëÇ󣬲âÊÔ API ÎĵµµÄÕýÈ·ÐÔ¡£

±àд controller

µ± API ÇëÇó±» Mock Server À¹½Øºó£¬ÓÉ controller ¾ö¶¨ÒªÈçºÎÏìÓ¦Õâ¸ö API ÇëÇó¡£ËùÒÔÐèÒª¶ÔÓ¦ËùÓÐµÄ API ÇëÇ󣬱àдÏìÓ¦Âß¼­Ö§³Öǰ¶Ë¿ª·¢¡£ÐèҪעÒâµÄÊÇÒª°ÑÏìÓ¦µÄÈë¿Ú·½·¨µ¼³ö¡£ÕâÀïÓиöС¼¼ÇÉ£¬ÎÒÃÇ¿ÉÒÔÔÚ controller µÄÈë¿Ú½«ÇëÇóµÄ URL Êä³öµ½ console »òÕßÈÕÖ¾ÖУ¬ÕâÑù±ãÓÚÔÚ¿ª·¢µÄ¹ý³ÌÖÐ×·×Ù API ÇëÇó¡£¾ßÌå´úÂëÇë²Î¿¼Çåµ¥ 8£º

Çåµ¥ 8. ±àд controller

module.exports = { viewContent };

function viewContent(req, res) {
console.log('viewContent : url=' + req.url);
var type = req.swagger.params.type.value
var htmlPath = '';
if (type === 'text'){
htmlPath = path.join(webStaticPath, 'html','text.html');
}
res.sendFile(htmlPath, function (err) {
if (err) {
console.error(err);
} else {
console.log('Sent:', htmlPath);
}
});
}

Ìí¼Ó proxy ¹¦ÄÜ

µ±ºó¶Ë´úÂ벿·Ö API ¿ª·¢Íê³Éºó£¬ÎÒÃÇÏ£ÍûÄܼ°Ê±¶ÔÒÑÍê³É´úÂ벿·Ö½øÐÐǰºó¶ËÁªµ÷¡£Õâʱ¿ÉÒÔ¸ø Mock Server Ìí¼Ó proxy µÄ¹¦ÄÜ£¬Ê¹ Mock Server ½Óµ½µÄÇëÇó¶¼×ªµ½ÕæÕýµÄºó¶Ë·þÎñ»·¾³ÉÏÈ¥¡£ ÕâÑùǰ¶Ë¾Í¿ÉÒÔÔÚ¿ª·¢»·¾³ÖÐÖ±½Ó·ÃÎÊÕæÕýµÄºó¶Ë·þÎñ£¬¶ø²»±Øµ£ÐÄ¿çÓòµÄÎÊÌâ¡£ÕâÀïÎÒÃÇʹÓà http-proxy-middleware °üÀ´ÊµÏÖ proxy ¹¦ÄÜ¡£

Ê×ÏÈÔÚ package.json ÎļþÖÐÌí¼Ó http-proxy-middleware lib °ü£¬È»ºó¹¤³ÌÀïÔËÐÐÒÔÏÂÃüÁî°²×° node module£º

# npm install

È»ºóÐÞ¸ÄÎÒÃÇµÄ Mock Server µÄÈë¿ÚÎļþ app.js£¬¾ßÌå´úÂëÇë²Î¿¼Çåµ¥ 9£º

Çåµ¥ 9. Ìí¼Ó proxy

var proxy = require('http-proxy-middleware');
/**
* Configure proxy middleware
*/
var targetUri = http + '://' + remoteHostName:port ;
var routePathList = ["/docs/docsrv","/docs/api"];
var docsProxy = proxy({
target: targetUri,
changeOrigin: true,
logLevel: 'debug',
secure: false
})
for(var i = 0; i routePathList.length; i++){
app.use(routePathList[i], docsProxy);
}

Ö§³Ö HTTPS

¹¤³ÌĬÈÏ´´½¨µÄ Mock Sever Ϊ HTTP Server£¬Èç¹ûÎÒÃÇÐèÒªÖ§³Ö HTTPS ÇëÇó, ¿ÉÒÔ¸üРapp.js ´úÂ룬֧³ÖÏìÓ¦ HTTPS ÇëÇó¡£¾ßÌå´úÂë²Î¿¼Çåµ¥ 10£º

Çåµ¥ 10. Ö§³Ö HTTPS

var config = {
appRoot: __dirname,
swaggerSecurityHandlers: {
key: fs.readFileSync('key.perm'),
cert: fs.readFileSync('cert.perm')
}
}
var port = process.env.PORT || 10010;
https.createServer({key: fs.readFileSync('key.perm'),
cert: fs.readFileSync('cert.perm')
}, app)
.listen(port, function () {
console.log('Https Server started, pls try from browser with https://127.0.0.1:%s/docs/test !', port);
})
}

ǰ¶Ë»ùÓÚ Mock Server ¿ª·¢

ǰ¶Ë¿ÉÒÔ½«×Ô¼º×÷Ϊ¾²Ì¬Îļþ¼ÓÔØµ½ Mock Server, ÕâÑù¾Í¿ÉÒÔÖ±½Ó½øÐÐǰ¶Î¿É·¢µ÷ÊÔ£¬ÎÞÐëÔÙÆðÒ»¸öǰ¶ËµÄ Server¡£¾ßÌå´úÂëÇë²Î¿¼Çåµ¥ 11£º

Çåµ¥ 11. ¼ÓÔØ¾²Ì¬Îļþ

app.use('/docs', express.static(appConfig.webresourcePath));

´úÂëÓÅ»¯

¼øÓÚÎÒÃÇÔÚÔ­ÓÐ Swagger ¹¤³ÌµÄ»ù´¡ÉÏÌí¼ÓÁËÆäËû¶îÍâµÄ¹¦ÄÜ£¬±ÈÈç¼ÓÔØÇ°¶Ë JavaScript ´úÂ룬֧³Ö HTTPS ÇëÇó£¬×ª·¢ API ÇëÇó¡£ÎÒÃÇ¿ÉÒÔÌáȡһ¸ö×Ô¼ºµÄ config Îļþ£¬ÔÚÅäÖÃÎļþÖÐÈ¥ÉèÖÃÊÇ·ñ¼ÓÔØÇ°¶Ë JavaScript ´úÂ룬ÐèÒª¼ÓÔØµÄǰ¶Ë´úÂëµÄ·¾¶£¬ÊÇ·ñת·¢ API ÇëÇó£¬×ª·¢ÄÄЩ API ÇëÇó£¬API ת·¢µÄÄ¿µÄ·þÎñÆ÷µØÖ·¡¢¶Ë¿Ú£¬Ö§³Ö HTTP »òÕßÊÇ HTTPS µÈµÈ¡£ÕâÑùÎÒÃÇ¿ÉÒÔºÜÈÝÒ×µÄÈ¥¸Ä±ä Mock Server µÄÌṩµÄ¹¦ÄÜ¡£

Ó¦ÓÃ Mock Server

Mock Server ¹¹½¨Íê³Éºó£¬ÎÒÃÇ¿ªÊ¼Ê¹Óà Mock Server ¿ªÊ¼Ç°¶Ë¿ª·¢¡£Ê×ÏÈÈ·¶¨ÄãµÄÅäÖÃÎļþµÄÉèÖÃÊÇÄãÐèÒªµÄ¡£±ÈÈç Mock Server ÊÇ·ñ¼ÓÔØÇ°¶Ë´úÂ룬Mock Server µÄÏìÓ¦¶Ë¿Ú£¬Mock Server ÊÇ·ñת·¢ÇëÇ󵽯äËû Server¡£±ÈÈçÒÔÏÂÊÇÎÒÃÇ¿ª·¢¹ý³ÌÖÐÓÃµÄ Mock Server ÅäÖÃÎļþ¡£ÎÒÃÇʹÓà Mock Server ¼ÓÔØÇ°¶Ë´úÂ룬ָ¶¨ Mock Server ÏìÓ¦¶Ë¿ÚÔÚ 10010£¬HTTP ЭÒ飬½«ÒÔ /docs/docsrv ºÍ /docs/api ¿ªÊ¼µÄ API ÇëÇóת·¢µ½ docsServeribm.com£º80 µÄ Server ÉÏ¡£¾ßÌå´úÂëÇë²Î¿¼Çåµ¥ 12£º

Çåµ¥ 12. ÅäÖÃÎļþ

{
"webresource_dir": "C:/Users/IBM_ADMIN/git/docs-webresource/docs-webresource",
"fake_data_dir": "",
"fake_server_port": "10010",
"version": "1.0.0",
"web_server": "true",
"mock": "true",
"protocol": "http",
"real_server": {
"protocol": "http",
"host": "docsServer.ibm.com",
"port": "80",
"pathList": ["/docs/docsrv","/docs/api"]
},
}

 

È»ºó´ò¿ªÃüÁîÐÐÔËÐÐÒÔÏÂÃüÁ½« Mock Server Æð¶¯ÆðÀ´£º

# swagger project start

 

ÒòΪ Mock Server ¼ÓÔØÁËǰ¶Ë´úÂ룬ÎÒÃÇ¿ÉÒÔÔÚä¯ÀÀÆ÷ÖÐÒÔ http://localhost:10010/docs/index.html Ö±½Ó·ÃÎÊǰ¶ËµÄÈë¿ÚÒ³Ãæ¡£Èç¹ûǰ¶Ë´úÂëÆðÔÚÁíÒ»¸ö Server ÉÏ£¬ÄÇôÐèÒª½«Ä㽫ǰ¶Ë´úÂëµÄ API ·ÃÎÊÇëÇóÅäÖõ½ Mock Server µÄÉÏ£¬È»ºó·ÃÎÊǰ¶ËµÄÈë¿ÚÒ³Ãæ¡£ÕâʱÒѾ­¿ª·¢ºÃµÄ¹¦ÄÜÓ¦¸ÃÄÜÕý³£ÏÔʾ¡£Èç¹û²»ÄÜÕý³£ÏÔʾ£¬ÎÒÃÇÐèҪ׷×Ù³ö´íµÄλÖ㬲鿴¶ÔÓ¦ API µÄ¶¨Òåµ÷ÓÃÏìÓ¦¸÷¸ö»·½ÚÊÇ·ñÒ»Ö£¬À´Åųý Mock Server ÏìÓ¦³ö´í¡£±ÈÈçÈ·ÈÏ´úÂë·¢³öµÄ API ÇëÇó£¬Óë swagger.yaml ÎļþÖж¨ÒåµÄ API ÊÇ·ñÒ»Ö£¬Õâ¾ö¶¨ÁË API ÊÇ·ñÄÜÔÚ Mock Server Öб»ÕýÈ·À¹½Ø£»È»ºó²é¿´ÏìÓ¦ API µÄ controller ·½·¨µÄÂß¼­£¬ÊÇ·ñ·µ»ØÁË API ÐèÒªµÄ¼ÙÊý¾Ý¡£Èç¹û Mock Server ÏìÓ¦ÕýÈ·£¬ÄÇôÕâ¾ÍÊÇǰ¶Ë´úÂëÕæÕýµÄ BUG£¬·ñÔòÐèÒªÏÈÐÞÕý Mock Server µÄ´íÎó¡£

½áÊøÓï

ʹÓà Swagger API Äܷܺ½±ãµÄЭÖúʵÏÖǰºó¶Ë·ÖÀ뿪·¢£¬µ«ÊÇÐèÒª±£Ö¤ API ¶¨ÒåµÄ׼ȷºÍÒ»ÖÂÐÔ¡£ÎÒÃÇÖªµÀËæ×ÅÏîÄ¿¿ª·¢µÄ²»¶Ï½øÐУ¬API ¶¨ÒåºÍʵÏֺܴó¿ÉÄÜÉÏ»áÓбä¸ü£¬ËùÒÔÐèÒªÔÚ API ±ä¸üµÄʱºòͬʱ¸üРMock Server µÄ API Îĵµ¡£Ä¿Ç°ºÜ¶àºó¶ËÓïÑÔ¶¼Óвå¼þÖ§³Ö×Ô¶¯Éú³É Rest API Îĵµ£¬ËùÒÔÒ²¿ÉÒÔ¿¼ÂǺó¶ËÏÈÍê³É Rest API ¿ò¼Ü²¿·Ö¿ª·¢£¬°ïÖúÉú³É Mock Server ËùÐèÒªµÄ API Îĵµ¡£ÕâÑùÄܸüºÃµÄ±£Ö¤ Mock Server µÄ׼ȷÐԺͿÉÓÃÐÔ¡£

   
3087 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

¹È¸è½ÌÄãÈçºÎ¹¹½¨Ò»¸öÓÅÐãµÄÒÆ¶¯ÍøÕ¾
ÈçºÎ¸ßЧµØ¹ÜÀíÍøÕ¾¾²Ì¬×ÊÔ´
¸ßÐÔÄÜÍøÕ¾½¨ÉèµÄ×î¼Ñʵ¼ù
Ïл°ÍøÕ¾×ó²àµ¼º½µÄʵÏÖ
 
Ïà¹ØÎĵµ

ÍøÕ¾½¨Éè·½°¸Á÷³Ì
ÍøÕ¾½¨Éècss½Ì³Ì
ÆóÒµÍøÕ¾½¨ÉèÓëÍÆ¹ã
ÍøÕ¾½¨Éè·½°¸Êé
Ïà¹Ø¿Î³Ì

Éè¼ÆÄ£Ê½Ô­ÀíÓëÓ¦ÓÃ
´ÓÐèÇó¹ý¶Éµ½Éè¼Æ
Èí¼þÉè¼ÆÔ­ÀíÓëʵ¼ù
ÈçºÎ±àд¸ßÖÊÁ¿´úÂë