±à¼ÍƼö: |
±¾ÎÄÀ´×Ôcnblogs£¬±¾ÎĽéÉÜÁËSwaggerÄܳÉΪ×îÊÜ»¶ÓµÄREST
APIsÎĵµÉú³É¹¤¾ßÖ®Ò»ÔÒò£¬½áºÏʵÀý½éÉÜSwaggerµÄʹÓ÷½·¨µÈ¡£ |
|
¹ØÓÚ Swagger
SwaggerÄܳÉΪ×îÊÜ»¶ÓµÄREST APIsÎĵµÉú³É¹¤¾ßÖ®Ò»£¬ÓÐÒÔϼ¸¸öÔÒò£º
Swagger ¿ÉÒÔÉú³ÉÒ»¸ö¾ßÓл¥¶¯ÐÔµÄAPI¿ØÖÆÌ¨£¬¿ª·¢Õß¿ÉÒÔÓÃÀ´¿ìËÙѧϰºÍ³¢ÊÔAPI¡£
Swagger ¿ÉÒÔÉú³É¿Í»§¶ËSDK´úÂëÓÃÓÚ¸÷ÖÖ²»Í¬µÄƽ̨ÉϵÄʵÏÖ¡£
Swagger Îļþ¿ÉÒÔÔÚÐí¶à²»Í¬µÄƽ̨ÉÏ´Ó´úÂë×¢ÊÍÖÐ×Ô¶¯Éú³É¡£
Swagger ÓÐÒ»¸öÇ¿´óµÄÉçÇø£¬ÀïÃæÓÐÐí¶àÇ¿º·µÄ¹±Ï×Õß¡£
Swagger ÎĵµÌṩÁËÒ»¸ö·½·¨£¬Ê¹ÎÒÃÇ¿ÉÒÔÓÃÖ¸¶¨µÄ JSON »òÕß YAML ÕªÒªÀ´ÃèÊöÄãµÄ API£¬°üÀ¨Á˱ÈÈç
names¡¢order µÈ API ÐÅÏ¢¡£
Äã¿ÉÒÔͨ¹ýÒ»¸öÎı¾±à¼Æ÷À´±à¼ Swagger Îļþ£¬»òÕßÄãÒ²¿ÉÒÔ´ÓÄãµÄ´úÂë×¢ÊÍÖÐ×Ô¶¯Éú³É¡£¸÷ÖÖ¹¤¾ß¶¼¿ÉÒÔʹÓÃ
Swagger ÎļþÀ´Éú³É»¥¶¯µÄ API Îĵµ¡£
×¢Ò⣺Óà Swagger ÎļþÉú³É»¥¶¯µÄ API ÎĵµÊÇ×¼òµÄ£¬ËüչʾÁË×ÊÔ´¡¢²ÎÊý¡¢ÇëÇó¡¢ÏìÓ¦¡£µ«ÊÇËü²»»áÌṩÄãµÄAPIÈçºÎ¹¤×÷µÄÆäËûÈκÎÒ»¸öϸ½Ú¡£
Petstore µÄ Swagger Àý×Ó
ΪÁ˸üºÃµÄÀí½â Swagger £¬ÎÒÃÇÏÖÔÚÀ´Ì½Ë÷һϠPetsotre ÏîÄ¿µÄÀý×Ó¡£¼Çס£ºÒÔϳöÏÖµÄ
UI ¶¼ÊÇÖ¸Swagger UI¡£Swagger ¿ÉÒÔ±»Õ¹Ê¾³É²»Í¬µÄÊÓ¾õÑùʽ£¬ÕâÈ¡¾öÓÚÄãËùʹÓõ½µÄÊÓ¾õ¿ò¼Ü¡£

ÓÐÈý¸ö×ÊÔ´£ºpet£¬store£¬user¡£
´´½¨Ò»¸ö pet
1¡¢Õ¹¿ª pet µÄ post ·½·¨
2¡¢È»ºóµ¥»÷ Model Schema ÖеĻÆÉ«×ÖÌåµÄ JSON¡£

ÕâÀïÓà JSON Ìî³äÁË body value¡£ÕâÀïµÄ JSON ÊÇÄã±ØÐëÉÏ´«µÄ£¬ÓÃÓÚ´´½¨ pet
×ÊÔ´¡£
3¡¢½«µÚÒ»¸ö id ±êÇ©µÄÖµÐÞ¸Äһϣ¨Äã±ØÐë±£Ö¤ id Öµ¶¼ÊÇΨһµÄ£¬²¢ÇÒ²»ÄÜ´Ó 0 ¿ªÊ¼£©¡£
4¡¢½« name ±êÇ©µÄÖµÐÞ¸Äһϣ¨×îºÃҲҪΨһ£¬·½±ã¶Ô±È½á¹û£©£¬ÒÔÏÂÊÇʾÀý´úÂ룺
{ "id":
37987, "category": { "id":
0, "name": "string"
}, "name": "Mr. Fluffernutter",
"photoUrls": [ "string"
], "tags": [
{ "id": 0, "name":
"string"
}
], "status": "available"
} |
5¡¢µ¥»÷ Try it out! °´Å¥£¬²é¿´ÏìÓ¦£º

ͨ¹ý ID ²éѯ pet
Õ¹¿ª Get ·½·¨£ºpet/{petId}£¬ÊäÈëÄãµÄ petId£¬µ¥»÷ Try it out!£¬Äã´´½¨µÄ
pet ¾Í»áÏÔʾÔÚ response ÖС£
ĬÈÏÇé¿öÏ£¬api ÏìÓ¦¶¼ÊÇ xml¡£¿ÉÒÔ°Ñ Response Content Type ÐÞ¸ÄΪ application/json
ÔÙÊÔÒ»´Î¡£
·µ»ØµÄÖµ½«»áÊÇ JSON ¸ñʽ
×¢Ò⣺ֵµÃÇ¿µ÷µÄÊÇ Swagger ÎĵµÒ»¶¨ÒªÍ¨¹ý×ÅÊÖ³¢ÊÔÀ´Ñ§Ï°¡£ÄãҪͨ¹ýʵʵÔÚÔڵķ¢ËÍÇëÇóºÍ²é¿´ÏìÓ¦À´¸üºÃµÄÀí½â
Petstore API ÊÇÈçºÎ¹¤×÷µÄ¡£µ«ÊÇ»¹Òª×¢ÒâÏÖÔÚÄãÒѾÔÚÄãµÄÕæÊµPetstoreÊý¾Ý¿âÖд´½¨ÁËÒ»¸öеÄpet¡£´Óѧϰ³¢ÊÔ
API ¹ý¶Éµ½ÔÚÉú²ú»·¾³ÖÐʹÓà API µÄʱºò£¬ÄÇЩ²âÊÔÊý¾ÝÄã¿ÉÄܶ¼ÐèÒª½«ËüÃÇɾ³ý¡£
ÕûÀí Swagger ×é¼þ
Swagger ·Ö³ÉһЩ²»Í¬µÄ¿é¡£
Swagger spec£ºÕâÒ»¿é¶ÔÔªËØµÄǶÌס¢ÃüÁîµÈ²ÉÓùٷ½Ä£Ê½¡£Èç¹ûÄãÏëÒª¶Ô Swagger ÎļþÊÖ¶¯±àÂ룬Äã±ØÐë·Ç³£ÊìϤ
Swagger spec¡£
Swagger editor£ºÕâÊÇÔÚÏß±à¼Æ÷£¬ÓÃÓÚÑéÖ¤ÄãµÄ YML ¸ñʽµÄÄÚÈÝÊÇ·ñÎ¥·´ Swagger
spec ¡£YML ÊÇÒ»Ö־䷨£¬ÒÀÀµÓÚ¿Õ¸ñºÍǶÌס£ÄãÐèÒª¶Ô YML ¾ä·¨ºÜÊìϤ²ÅÄܺܺõÄ×ñÊØ Swagger
spec ¹æ·¶¡£Swagger ±à¼Æ÷»á±ê³ö´íÎó²¢ÇÒ¸øÄã¸ñʽÌáÐÑ£¨Swagger spec Îļþ¿ÉÒÔʹÓÃ
JSON »òÕß YAML ÖеÄÈÎÒâÒ»ÖÖ¸ñʽ£©¡£

Swagger-UI£ºÕâÊÇÒ»Ì× HTML/CSS/JS ¿ò¼ÜÓÃÓÚ½âÎö×ñÊØ Swagger spec
µÄ JSON »ò YML Îļþ£¬²¢ÇÒÉú³ÉAPIÎĵµµÄUIµ¼º½¡£Ëü¿ÉÒÔ½«ÄãµÄ¹æ¸ñÎĵµ×ª»»³ÉSwagger
Petsotre-like UI¡£
Swagger-codegen£ºÕâ¸ö¹¤¾ß¿ÉÒÔΪ²»Í¬µÄƽ̨Éú³É¿Í»§¶Ë SDK£¨±ÈÈç Java¡¢JavaScript¡¢Python
µÈ£©¡£ÕâЩ¿Í»§¶Ë´úÂë°ïÖú¿ª·¢ÕßÔÚÒ»¸ö¹æ·¶Æ½Ì¨ÖÐÕûºÏ API £¬²¢ÇÒÌṩÁ˸ü¶à½¡×³µÄʵÏÖ£¬¿ÉÄܰüº¬Á˶à³ß¶È¡¢Ị̈߳¬ºÍÆäËûÖØÒªµÄ´úÂë¡£SDK
ÊÇÓÃÓÚÖ§³Ö¿ª·¢ÕßʹÓà REST API µÄ¹¤¾ß¡£
һЩ Swagger µÄʵÏÖÀý×Ó
Reverb
VocaDB
Watson Developer Cloud
ËüÃÇ´ó¶à¿´ÆðÀ´Ò»Ñù¡£Äã»á×¢Òâµ½ Swagger ʵÏÖµÄÎĵµ¶¼ºÜ¾«¼ò¡£ÕâÊÇÒòΪ Swagger µÄչʾ¶¼ÊÇ»¥¶¯µÄÌåÑ飬Äã¿ÉÒÔ³¢ÊÔÇëÇóºÍ²é¿´ÏìÓ¦£¬Ê¹ÓÃÄã×Ô¼ºµÄ
API ÃÜÔ¿À´²é¿´Äã×Ô¼ºµÄÊý¾Ý¡£ËüÊDZ߿´±ß×ö±ßѧµÄÐÎʽ¡£
ËüÒ²ÓÐһЩȱÏÝ£º
ûÓÐÌ«¶àµÄ¿Õ¼äÀ´ÃèÊöºó¶ËÏêϸµÄ¹¤×÷
ÿ¸ö Swagger UI µÄÊä³ö¿´ÆðÀ´¶¼²î²»¶à
Swagger UI »á´ÓÄãÆäËûµÄÎĵµÖзÖÀë³É¶ÀÁ¢µÄÒ»¸öÕ¾µã
´´½¨ Swagger UI չʾ
±¾½ÚÎÒÃǽ«ÎªÊ¹ÓÃMashape Weather APIµÄ weatherdata ºǫ́À´´´½¨Ò»¸ö Swagger
UI £¨weatherdataÊÇ֮ǰµÄ¿Î³ÌÖд´½¨µÄÒ»¸öÏîÄ¿£©¡£Äã¿ÉÒÔÔÚÕâÀï²é¿´demo¡£

a.´´½¨Ò»¸ö Swagger spec Îļþ
1¡¢È¥Swagger online editor
2¡¢Ñ¡Ôñ File > Open Example È»ºóÑ¡Ôñ PetStore Simple ¡£µ¥»÷
Open¡£
Äã¿ÉÒÔʹÓà weatherdata ºǫ́ÎĵµÀ´×Ô¶¨ÒåÕâ¸öʾÀý YML Îļþ¡£µ«Èç¹ûÄãÊÇÐÂÊÖ£¬ Ëü»á´øÄãÈÏʶspec¡£·½±ãÆð¼û£¬Ö»ÐèÒªÓõ½ÏÂÃæµÄÎļþ£¬È»ºó¸´ÖÆÒ»·Ýµ½
Swagger editor: swagger.yaml¡£
swagger: "2.0"
info:
version: "1.0.0"
title: "Weather API"
description: "A sample API that uses a Mashape
weather API as an example to demonstrate features
in the swagger-2.0 specification"
termsOfService: "http://helloreverb.com/terms/"
contact:
name: "Tom Johnson"
email: "tomjohnson1492@gmail.com"
url: "http://swagger.io"
license:
name: "MIT"
url: "http://opensource.org/licenses/MIT"
host: "simple-weather.p.mashape.com"
schemes:
- "https"
consumes:
- "application/json"
produces:
- "application/text"
paths:
/aqi:
get:
tags:
- "Air Quality"
description: "gets air quality index"
operationId: "getAqi"
produces:
- "text"
parameters:
-
name: "lat"
in: "query"
description: "latitude"
required: false
type: "string"
-
name: "lng"
in: "query"
description: "longitude"
required: false
type: "string"
responses:
200:
description: "aqi response"
default:
description: "unexpected error"
/weather:
get:
tags:
- "Weather Forecast"
description: "gets weather forecast in
short label"
operationId: "getWeather"
produces:
- "text"
parameters:
-
name: "lat"
in: "query"
description: "latitude"
required: false
type: "string"
-
name: "lng"
in: "query"
description: "longitude"
required: false
type: "string"
responses:
200:
description: "weather response"
default:
description: "unexpected error"
/weatherdata:
get:
tags:
- "Full Weather Data"
description: "Get weather forecast by Latitude
and Longitude"
operationId: "getWeatherData"
produces:
- "application/json"
parameters:
-
name: "lat"
in: "query"
description: "latitude"
required: false
type: "string"
-
name: "lng"
in: "query"
description: "longitude"
required: false
type: "string"
responses:
200:
description: "weatherdata response"
default:
description: "unexpected error"
securityDefinitions:
internalApiKey:
type: apiKey
in: header
name: X-Mashape-Key |
×¢Ò⣺ʹÓà YML Ìæ»»JSON¡£ YML ¾ä·¨±È JSON ¿É¶ÁÐԸߡ£Ê¹Óà YML £¬¿Õ¸ñºÜÖØÒª¡£Ð¶ÎÂäÐèÒªËõ½øÁ½¸ö¿Õ¸ñ¡£Ã°ºÅ±íʾ¸ö¶ÔÏó¡£Á¬×Ö·û´ú±íÒ»¸ö
sequence »òÕß list £¨ÏñÒ»¸ö array£©¡£Èç¹ûÄãÏÂÔØÕâ¸öÎļþ¶ø²»ÊǸ´ÖÆÕ³Ìù£¬Äã»ù±¾²»»áÅöµ½¿Õ¸ñÎÊÌâ¡£
Swagger editor ¸æËßÄãÎļþÈçºÎ±»Êä³ö£¬ÄãÒ²¿ÉÒÔ¿´µ½ÑéÖ¤³öÀ´µÄ´íÎó¡£Ã»ÓÐÕâ¸öÔÚÏß±à¼Æ÷£¬ÄãÖ»ÄÜÔÚÔËÐдúÂëµÄʱºò²ÅÄÜÖªµÀ
YML ¾ä·¨ÊÇ·ñÓÐЧ £¨²¢ÇÒ¿´µ½´íÎóÌáʾ£¬ YAML ÎļþÒ²²»Äܱ»ÕýÈ·½âÎö£©¡£
3¡¢±£Ö¤ Swagger edirot ÖÐµÄ YAML ÎļþÓÐЧ¡£Èç¹ûÓдíÎó±ØÐëÒªÐÞÕý¡£
4¡¢Ñ¡Ôñ File > Download YAML ²¢ÇÒ±£´æÎª swagger.yaml µ½±¾µØ£¨Äã¿ÉÒÔÖ»¸´ÖÆ´úÂëÈ»ºóÕ³Ìùµ½¿Õ°×ÎļþÖУ¬ÃüÃûΪ
swagger.yaml£©¡£
ÄãÒ²¿ÉÒÔÑ¡Ôñ JSON ¸ñʽ£¬²»¹ý YAML ¿É¶ÁÐÔ¸ü¸ß¡£
b.ÉèÖÃ Swagger UI
1¡¢Github: Swagger UI¡£ÏÂÔØ¡¢½âѹ¡£Ö»ÐèÒªÓõ½ dist Îļþ¼Ð¡£³ý·ÇÄãÏëÖØÐÂÉú³É
dist ÖеÄÎļþ£¬²Å»áÓõ½±ðµÄ¡£
2¡¢´ò¿ª dist > index.html
3¡¢ÕÒµ½£ºurl = "http://petstore.swagger.io/v2/swagger.json";
4¡¢Öµ¸Ä³É swagger.yaml µÄ·¾¶
5¡¢±£´æ´ò¿ªindex.html
c.ÉÏ´«Îļþµ½ web Ö÷»ú
³ýÁ˱¾µØä¯ÀÀ Swagger Îļþ£¬ÄãÒ²¿ÉÒÔʹÓà XAMPP ÔÚ±¾µØÔËÐÐÒ»¸ö web ·þÎñÆ÷
1¡¢ÏÂÔØ°²×°XAMPP
2¡¢ÔÚÄãµÄÓ¦ÓóÌÐòÎļþ¼ÐÖдò¿ª XAMPP Îļþ¼Ð£¬Æô¶¯ manager-osx ¿ØÖÆÌ¨
3¡¢µ¥»÷ Manage Servers tab
4¡¢Ñ¡Ôñ Apache Web Server µ¥»÷ Start
5¡¢´ò¿ª XAMPP ÖÐµÄ htdocs Îļþ¼Ð¡£Èç¹ûÊÇMac£¬Í¨³£ÔÚ /Applications/XAMPP/xamppfiles/htdocs¡£
6¡¢½« dist Îļþ¼ÐÍϵ½´Ë´¦
7¡¢ÔÚÄãµÄä¯ÀÀÆ÷ÖÐä¯ÀÀ localhost/dist
¾Í¿ÉÒÔ¿´µ½ Swagger UIµÄչʾ¡£
ÌåÑé Swagger UI
1¡¢ÓÃä¯ÀÀÆ÷ä¯ÀÀ Swagger UI¡£
2¡¢ÔÚÓÒÉϽǣ¬µ¥»÷ Authorize ²¢ÇÒÊäÈëÄãµÄ Mashape API Key¡£Èç¹ûÄãûÓÐ Mashape
API Key£¬Äã¿ÉÒÔ3¡¢Ê¹Óà EF3g83pKnzmshgoksF83V6JB6QyTp1cGrrdjsnczTkkYgYrp8p¡£
4¡¢È¥ Google Maps ËÑË÷Ò»¸öµØÖ·¡£
5¡¢´Ó URL ÖÐÈ¥»ñÈ¡¾Î³¶È£¬½«Æä²åÈëµ½ÄãµÄ Swagger UIÖУ¨±ÈÈ磺1.3319164 for
lat, 103.7231246 for lng£©
6¡¢µ¥»÷ Try it out¡£
Èç¹û³É¹¦£¬ÄãÓ¦¸Ã¿ÉÒÔ¿´µ½ response body µÄÏìÓ¦£º9 c, Mostly Cloudy
at South West, Singapore
Èç¹ûÄã¿´µ½ÁËNot supported£¬³¢ÊÔµ÷Õû¾Î³¶È¡£
Èç¹ûÄãË¢ÐÂÁ˽çÃæ£¬ÄãÒªÖØÐÂÊäÈë API Key¡£
´Ó×¢ÊÍÖÐ×Ô¶¯Éú³É Swagger Îļþ
ΪÁË´úÌæ Swagger file µÄÊÖ¶¯±àÂ룬ÄãÒ²¿ÉÒÔ´ÓÄãµÄ³ÌÐò´úÂë×¢ÊÍÖÐ×Ô¶¯Éú³É¡£ÓÐÐí¶àµÄ Swagger
¿â¿ÉÒÔÓÃÀ´ÕûºÏ²»Í¬µÄ´úÂë¿â¡£ÕâЩ Swagger ¿â¿ÉÒÔ½âÎö×¢ÊͲ¢ÇÒÉú³É¸ú֮ǰÊÖ¶¯Éú³ÉÏàͬµÄ Swagger
Îļþ¡£
ÒªÕûºÏ Swagger µ½×Ô¼ºµÄ´úÂëÖУ¬ÒªÔÊÐí¿ª·¢Õß±ã½ÝµÄ׫дÎĵµ£¬±£Ö¤ÐÂÌØÐÔ¶¼»á±»¼Ç¼£¬²¢ÇÒ±£³ÖÎĵµµÄ¸üС£ÕâЩעÊÍ·½·¨¸ù¾Ý²»Í¬µÄÓïÑԷֳɲ»Í¬µÄ
Swagger Îĵµ¿é¡£ |