±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ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£º
°²×°ÃüÁîÖ´ÐÐÍê³Éºó£¬¿ÉÒÔÔËÐÐÒÔÏÂÃüÁîÀ´È·¶¨ Swagger ÊÇ·ñ°²×°³É¹¦£º
´´½¨¹¤³Ì
ÔËÐÐÒÔÏÂÃüÁ´´½¨ 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¡£
¹¤³ÌÕýÈ·Æô¶¯ºó»áÌáʾÎÒÃ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£º
È»ºóÐÞ¸ÄÎÒÃÇµÄ 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 Æð¶¯ÆðÀ´£º
ÒòΪ 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 µÄ׼ȷÐԺͿÉÓÃÐÔ¡£ |