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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ͨ¹ýdemoѧϰOpenStack¿ª·¢--API·þÎñ(3)
 
×÷Õߣº Áõ³Âãü  À´Ô´;.infoq ·¢²¼ÓÚ 2016-7-15
  2391  次浏览      28
 

±àÕß°´£º¡¶Í¨¹ýdemoѧϰOpenStack¿ª·¢¡·×¨À¸ÊÇÁõ³ÂãüµÄϵÁÐÎÄÕ£¬×¨À¸Í¨¹ý¿ª·¢Ò»¸ödemoµÄÐÎʽ À´½éÉÜһЩ²ÎÓëOpenStackÏîÄ¿¿ª·¢µÄ±ØÒªµÄ»ù´¡ÖªÊ¶£¬Ï£Íû°ïÖú´ó¼ÒÈëÃÅÆóÒµ¼¶PythonÏîÄ¿µÄ¿ª·¢ºÍOpenStackÏîÄ¿µÄ¿ª·¢¡£Áõ³ÂãüÖ÷Òª ¹Ø×¢OpenStackµÄÉí·ÝÈÏÖ¤ºÍ¼Æ·ÑÁìÓò¡£ÁíÍ⣬»¹¶ÔÔÆ¼ÆËã¡¢·Ö²¼Ê½ÏµÍ³Ó¦ÓúͿª·¢¸ÐÐËȤ¡£

ÉÏһƪÎÄÕÂÎÒÃÇÁ˽âÁËÒ»¸ö¾Þ†ªàµĿò¼Ü£ºPaste + PasteDeploy + Routes + WebOb¡£ºóÀ´£¬OpenStackÉçÇøµÄÈËÊܲ»ÁËÕâô†ªàµĴúÂëÁË£¬¾ö¶¨»»Ò»¸ö¿ò¼Ü£¬ËûÃÇ×îÖÕÑ¡ÖÐÁËPecan¡£Pecan¿ò¼ÜÏà±ÈÉÏһƪÎÄÕµĆªà ¿ò¼ÜÓÐÈçϺô¦£º

(1) ²»ÓÃ×Ô¼ºÐ´WSGI applicationÁË

(2) ÇëÇó·ÓɺÜÈÝÒ׾ͿÉÒÔʵÏÖÁË

×ܵÄÀ´Ëµ£¬ÓÃÉÏPecan¿ò¼ÜÒԺ󣬺ܶàÖØ¸´µÄ´úÂë²»ÓÃдÁË£¬¿ª·¢ÈËÔ±¿ÉÒÔרעÓÚÒµÎñ£¬Ò²¾ÍÊÇʵÏÖÿ¸öAPIµÄ¹¦ÄÜ¡£

Pecan

Pecan¿ò¼ÜµÄÄ¿±êÊÇʵÏÖÒ»¸ö²ÉÓöÔÏó·Ö·¢·½Ê½½øÐÐURL·ÓɵÄÇáÁ¿¼¶Web¿ò¼Ü¡£Ëü·Ç³£×¨×¢ÓÚ×Ô¼ºµÄÄ¿±ê£¬ËüµÄ´ó²¿·Ö¹¦Äܶ¼ºÍURL·ÓÉÒÔ¼°Çë ÇóºÍÏìÓ¦µÄ´¦ÀíÏà¹Ø£¬¶ø²»È¥ÊµÏÖÄ£°å¡¢°²È«ÒÔ¼°Êý¾Ý¿â²ã£¬ÕâЩ¶«Î÷¶¼¿ÉÒÔͨ¹ýÆäËûµÄ¿âÀ´ÊµÏÖ¡£¹ØÓÚPecanµÄ¸ü¶àÐÅÏ¢£¬¿ÉÒԲ鿴Îĵµ¡£±¾ÎÄÒÔ£¬OpenStackµÄmagnumÏîĿΪÀýÀ´ËµÃ÷PecanÏîÄ¿ÔÚʵ¼ÊÖеÄÓ¦Ó㬵«ÊDZ¾ÎIJ»»áÏêϸ½²½âPecanµÄ¸÷¸ö·½Ã棬һЩϸ½ÚÇë¶ÁÕßÔĶÁPecanµÄÎĵµ¡£

ÏîÄ¿ÖеĴúÂë½á¹¹

ʹÓÃPecan¿ò¼Üʱ£¬£¬OpenStackÏîĿһ°ã»á°ÑAPI·þÎñµÄʵÏÖ¶¼·ÅÔÚÒ»¸öapiĿ¼Ï£¬±ÈÈçmagnumÏîÄ¿ÊÇÕâÑùµÄ£º

ÄãÒ²¿ÉÒÔÔÚCeilometerÏîÄ¿Öп´µ½ÀàËÆµÄ½á¹¹¡£½éÉÜһϼ¸¸öÖ÷ÒªµÄÎļþ£¬ÕâÑùÄãÒÔºó¿´µ½Ò»¸öʹÓÃPecanµÄ£¬OpenStackÏîĿʱ¾Í»á±È½ÏÈÝÒ×ÕÒµ½Èë¿Ú¡£

(1) app.py Ò»°ã°üº¬ÁËPecanÓ¦ÓõÄÈë¿Ú£¬°üº¬Ó¦Óóõʼ»¯´úÂë

(2)config.py °üº¬PecanµÄÓ¦ÓÃÅäÖ㬻ᱻapp.pyʹÓÃ

(3)controllers/ Õâ¸öĿ¼»á°üº¬ËùÓеĿØÖÆÆ÷£¬Ò²¾ÍÊÇAPI¾ßÌåÂß¼­µÄµØ·½

(4) controllers/root.py Õâ¸ö°üº¬¸ù·¾¶¶ÔÓ¦µÄ¿ØÖÆÆ÷

(5)controllers/v1/ Õâ¸öĿ¼¶ÔÓ¦v1°æ±¾µÄAPIµÄ¿ØÖÆÆ÷¡£Èç¹ûÓжà¸ö°æ±¾µÄAPI£¬ÄãÒ»°ãÄÜ¿´µ½v2µÈĿ¼¡£

´úÂë±äÉÙÁË£ºapplicationµÄÅäÖÃ

PecanµÄÅäÖúÜÈÝÒ×£¬Í¨¹ýÒ»¸öPythonÔ´ÂëʽµÄÅäÖÃÎļþ¾Í¿ÉÒÔÍê³É»ù±¾µÄÅäÖá£Õâ¸öÅäÖõÄÖ÷ҪĿµÄÊÇÖ¸¶¨Ó¦ÓóÌÐòµÄroot£¬È»ºóÓÃÓÚÉú³É WSGI application¡£ÎÒÃÇÀ´¿´MagnumÏîÄ¿µÄÀý×Ó¡£MagnumÏîÄ¿ÓиöAPI·þÎñÊÇÓÃPecanʵÏֵģ¬ÔÚmagnum/api/config.pyÎļþÖпÉÒÔÕÒµ½Õâ¸öÎļþ£¬Ö÷ÒªÄÚÈÝÈçÏ£º

ÉÏÃæÕâ¸öapp¶ÔÏó¾ÍÊÇPecanµÄÅäÖã¬Ã¿¸öPecanÓ¦Óö¼ÐèÒªÓÐÕâôһ¸öÃûΪappµÄÅäÖá£appÅäÖÃÖÐ×îÖ÷ÒªµÄ¾ÍÊÇrootµÄÖµ£¬Õâ¸öÖµ±íʾÁËÓ¦ÓóÌÐòµÄÈë¿Ú£¬Ò²¾ÍÊÇ´ÓÄĸöµØ·½¿ªÊ¼½âÎöHTTPµÄ¸ùpath£º/¡£hooks¶ÔÓ¦µÄÅäÖÃÊÇһЩPecanµÄhook£¬×÷ÓÃÀàËÆÓÚWSGI Middleware¡£

ÓÐÁËappÅäÖú󣬾ͿÉÒÔÈÃPecanÉú³ÉÒ»¸öWSGI application¡£ÔÚMagnumÏîÄ¿ÖУ¬magnum/api/app.pyÎļþ¾ÍÊÇÉú³ÉWSGI applicationµÄµØ·½£¬ÎÒÃÇÀ´¿´Ò»ÏÂÕâ¸öµÄÖ÷ÒªÄÚÈÝ£º

get_pecan_config()·½·¨¶ÁÈ¡ÎÒÃÇÉÏÃæÌáµ½µÄconfig.pyÎļþ£¬È»ºó·µ»ØÒ»¸öpecan.configuration.Config¶ÔÏó¡£setup_app()º¯ÊýÊ×Ïȵ÷ÓÃget_pecan_config()º¯Êý»ñÈ¡applicationµÄÅäÖã¬È»ºóµ÷ÓÃpecan.make_app()º¯Êý´´½¨ÁËÒ»¸öWSGI application£¬×îºóµ÷ÓÃÁËauth.install()º¯Êý£¨Ò²¾ÍÊÇmagnum.api.auth.install()º¯Êý£©Îª¸Õ¸ÕÉú³ÉµÄWSGI application¼ÓÉÏKeystoneµÄÈÏÖ¤Öмä¼þ£¨È·±£ËùÓеÄÇëÇó¶¼»áͨ¹ýKeystoneÈÏÖ¤£©¡£

µ½Õâ±ßΪֹ£¬Ò»¸öPecanµÄWSGI application¾ÍÒѾ­×¼±¸ºÃÁË£¬Ö»Òªµ÷ÓÃÕâ¸ösetup_app()º¯Êý¾ÍÄÜ»ñµÃ¡£ÖÁÓÚÈçºÎ²¿ÊðÕâ¸öWSGI application£¬Çë²Î¿¼WSGI¼ò½éÕâÆªÎÄÕ¡£

´ÓMagnumÕâ¸öʵ¼ÊµÄÀý×Ó¿ÉÒÔ¿´³ö£¬Ê¹ÓÃÁËPecanÖ®ºó£¬ÎÒÃDz»ÔÙÐèÒª×Ô¼ºÐ´ÄÇЩÈßÓàµÄWSGI application´úÂëÁË£¬Ö±½Óµ÷ÓÃPecanµÄmake_app()º¯ Êý¾ÍÄÜÍê³ÉÕâЩ¹¤×÷¡£ÁíÍ⣬¶ÔÓÚ֮ǰʹÓÃPasteDeployʱÓõ½µÄºÜ¶àWSGIÖмä¼þ£¬¿ÉÒÔÑ¡ÔñʹÓÃPecanµÄhooks»úÖÆÀ´ÊµÏÖ£¬Ò²Ñ¡ÔñʹÓà WSGIÖмä¼þµÄ·½Ê½À´ÊµÏÖ¡£ÔÚMagnumµÄAPI·þÎñ¾ÍͬʱʹÓÃÁËÕâÁ½ÖÖ·½Ê½¡£Æäʵ£¬Pecan»¹¿ÉÒÔºÍPasteDeployÒ»Æðʹ Óã¬CeilometerÏîÄ¿¾ÍÊÇÕâô×öµÄ£¬´ó¼Ò¿ÉÒÔ¿´¿´¡£

È·¶¨Â·ÓɱäµÃÈÝÒ×ÁË£º¶ÔÏó·Ö·¢Ê½µÄ·ÓÉ

Pecan²»½öËõ¼õÁËÉú³ÉWSGI applicationµÄ´úÂ룬¶øÇÒÒ²Èÿª·¢ÈËÔ±¸üÈÝÒ×µÄÖ¸¶¨Ò»¸öapplicationµÄ·ÓÉ¡£Pecan²ÉÓÃÁËÒ»ÖÖ¶ÔÏó·Ö·¢·ç¸ñ£¨object-dispatch style£©µÄ·ÓÉģʽ¡£ÎÒÃÇÖ±½Óͨ¹ýÀý×ÓÀ´½âÊÍÕâÖÖ·ÓÉģʽ£¬»¹ÊÇÒÔMagnumÏîĿΪÀý¡£

ÉÏÃæÌáµ½ÁË£¬MagnumµÄAPI·þÎñµÄrootÊÇmagnum.api.controllers.root.RootController¡£ÕâÀïµÄRootControllerµÄÊÇÒ»¸öÀ࣬ÎÒÃÇÀ´¿´ËüµÄ´úÂ룺

±ð¿´Õâ¸öÀàÕâô³¤£¬ÎÒÀ´½âÊÍÒ»ÏÂÄã¾Í¶®ÁË¡£Ê×ÏÈ£¬Äã¿ÉÒÔÏȺöÂÔµô_route()º¯Êý£¬Õâ¸öº¯ÊýÊÇÓÃÀ´¸²¸ÇPecanµÄĬÈÏ·ÓÉʵÏֵģ¬ÔÚÕâÀïÈ¥µôËü²»·Á°­ÎÒÃÇÀí½âPecan£¨ÕâÀïµÄ_route()º¯ÊýµÄ×÷ÓðÑËùÓÐÇëÇóÖØ¶¨Ïòµ½Ä¬ÈϵÄAPI°æ±¾È¥£©¡£È¥µô_route()ºÍÆäËûµÄ¶«Î÷ºó£¬Õû¸öÀà¾Í±ä³ÉÕâô¶Ì£º

(1) Ê×ÏÈ£¬ÄãÒª¼Çס£¬Õâ¸öRootController¶ÔÓ¦µÄÊÇURLÖиù·¾¶£¬Ò²¾ÍÊÇpathÖÐ×î×ó±ßµÄ/¡£ (2)RootController¼Ì³Ð×Ôrest.RestController£¬ÊÇPecanʵÏÖµÄRESTful¿ØÖÆÆ÷¡£ÕâÀïµÄ get()º¯Êý±íʾ£¬µ±·ÃÎʵÄÊÇGET /ʱ£¬Óɸú¯Êý´¦Àí¡£get()º¯Êý»á·µ»ØÒ»¸öWSME¶ÔÏ󣬱íʾһ¸öÐÎʽ»¯µÄHTTP Response£¬Õâ¸öÏÂÃæÔÙ½²¡£get()º¯ÊýÉÏÃæµÄexpose×°ÊÎÆ÷ÊÇPecanʵÏÖ·ÓÉ¿ØÖƵÄÒ»¸ö·½Ê½£¬±»exposeµÄº¯Êý²Å»á±»Â·ÓÉ´¦Àí¡£ (3)ÕâÀïµÄv1 = v1.Controller()±íʾ£¬µ±·ÃÎʵÄÊÇGET /v1»òÕßGET /v1/¡­Ê±£¬ÇëÇóÓÉÒ»¸öv1.ControllerʵÀýÀ´´¦Àí¡£

ΪÁ˼ÓÉî´ó¼ÒµÄÀí½â£¬ÎÒÃÇÔÙÀ´¿´ÏÂv1.ControllerµÄʵÏÖ£º

ÉÏÃæÕâ¸öControllerÒ²ÊǼ̳Ð×Ôrest.RestController¡£ËùÒÔËüµÄgetº¯Êý±íʾ£¬µ±·ÃÎʵÄÊÇGET /v1µÄʱºò£¬Òª×öµÄ´¦Àí¡£È»ºó£¬Ëü»¹ÓкܶàÀàÊôÐÔ£¬ÕâЩÊôÐÔ·Ö±ð±íʾ²»Í¬URL·¾¶µÄ¿ØÖÆÆ÷£º

(1) /v1/bays ÓÉbays´¦Àí (2)/v1/baymodels ÓÉbaymodels´¦Àí (3)/v1/containers ÓÉcontainers´¦Àí

ÆäËûµÄ¶¼ÊÇÀàËÆµÄ¡£ÎÒÃÇÔÙ¼ÌÐø¿´bay.BaysControllerµÄ´úÂ룺

Õâ¸öcontrollerÖÐÖ»Óк¯Êý£¬Ã»ÓÐÈκÎÀàÊôÐÔ£¬¶øÇÒûÓÐʵÏÖÈκÎÌØÊâ·½·¨£¬ËùÒÔ/v1/bays¿ªÍ·µÄURL´¦Àí¶¼ÔÚÕâ¸öcontrollerÖÐÖսᡣÕâ¸öÀà»á´¦ÀíÈçÏÂÇëÇó£º

(1)GET /v1/bays (2)GET /v1/bays/{UUID} (3)POST /v1/bays (4)PATCH /v1/bays/{UUID} (5)DELETE /v1/bays/{UUID} (6)GET /v1/bays/detail/{UUID}

¿´ÁËÉÏÃæµÄ3¸öcontrollerÖ®ºó£¬ÄãÓ¦¸ÃÄÜ´ó¸ÅÃ÷°×PecanÊÇÈçºÎ¶ÔURL½øÐзÓɵġ£ÕâÖÖ·ÓÉ·½Ê½¾ÍÊǶÔÏó·Ö·¢£º¸ù¾ÝÀàÊôÐÔ£¬°üÀ¨Êý¾Ý ÊôÐԺͷ½·¨ÊôÐÔÀ´¾ö¶¨ÈçºÎ·ÓÉÒ»¸öHTTPÇëÇó¡£PecanµÄÎĵµÖжÔÇëÇóµÄ·ÓÉÓÐרÃŵÄÃèÊö£¬ÒªÏëÕÆÎÕPecanµÄ·ÓÉ»¹ÊÇÒªÍêÕûµÄ¿´Ò»Ï¹ٷ½Îĵµ¡£

ÄÚÖÃRESTfulÖ§³Ö

ÎÒÃÇÉÏÃæ¾ÙÀýµÄcontroller¶¼ÊǼ̳Ð×Ôpecan.rest.RestController£¬ÕâÖÖcontroller³ÆÎªRESTful controller£¬ רÃÅÓÃÓÚʵÏÖRESTful APIµÄ£¬Òò´ËÔÚ£¬OpenStackÖÐʹÓÃÌØ±ð¶à¡£Pecan»¹Ö§³ÖÆÕͨµÄcontroller£¬³ÆÎªGeneric controller¡£Generic controller¼Ì³Ð×Ôobject¶ÔÏó£¬Ä¬ÈÏûÓÐʵÏÖ¶ÔRESTfulÇëÇóµÄ·½·¨¡£¼òµ¥µÄ˵£¬RESTful controller°ïÎÒÃǹ涨ºÃÁËget_one()£¬get_all()£¬ get()£¬post()µÈ·½·¨¶ÔÓ¦µÄHTTPÇëÇ󣬶øGeneric controllerÔòûÓС£¹ØÓÚÕâÁ½ÖÖcontrollerµÄÇø±ð£¬¿ÉÒÔ¿´¹Ù·½Îĵµ¡¶Writing RESTful Web Services with Generic Controllers¡·£¬ÓкÜÇå³þµÄʾÀý¡£

¶ÔÓÚRestControllerÖÐûÓÐÔ¤Ïȶ¨ÒåºÃµÄ·½·¨£¬ÎÒÃÇ¿ÉÒÔͨ¹ý¿ØÖÆÆ÷µÄ_custom_actionsÊôÐÔÀ´Ö¸¶¨ÆäÄÜ´¦ÀíµÄ·½·¨¡£

ÉÏÃæÕâ¸ö¿ØÖÆÆ÷ÊÇÒ»¸ö¸ù¿ØÖÆÆ÷£¬Ö¸¶¨ÁË/test·¾¶Ö§³ÖGET·½·¨£¬Ð§¹ûÈçÏ£º

ÄÇôHTTPÇëÇóºÍHTTPÏìӦĨ£¿

ÉÏÃæ½²ÁËÕâô¶à£¬ÎÒÃǶ¼Ã»ÓÐ˵Ã÷ÔÚPecanÖÐÈçºÎ´¦ÀíÇëÇóºÍÈçºÎ·µ»ØÏìÓ¦¡£Õâ¸ö½«ÔÚÏÂÒ»ÕÂÖÐ˵Ã÷£¬Í¬Ê±ÎÒÃÇ»áÒýÈëÒ»¸öеĿâWSME¡£

WSME

Pecan¶ÔÇëÇóºÍÏìÓ¦µÄ´¦Àí

ÔÚ¿ªÊ¼Ìáµ½WSME֮ǰ£¬ÎÒÃÇÏÈÀ´¿´ÏÂPecan×Ô¼º¶ÔHTTPÇëÇóºÍÏìÓ¦µÄ´¦Àí¡£ÕâÑùÄãÄܸüºÃµÄÀí½âΪʲô»áÔÙÒýÈëÒ»¸öWSME¿â¡£

Pecan¿ò¼ÜΪÿ¸öÏß³Ìά»¤Á˵¥¶ÀµÄÇëÇóºÍÏìÓ¦¶ÔÏó£¬Äã¿ÉÒÔÖ±½ÓÔÚÇëÇó´¦Àíº¯ÊýÖзÃÎÊ¡£pecan.requestºÍpecan.response·Ö±ð´ú±íµ±Ç°ÐèÒª´¦ÀíµÄÇëÇóºÍÏìÓ¦¶ÔÏó¡£Äã¿ÉÒÔÖ±½Ó²Ù×÷ÕâÁ½¸ö¶ÔÏ󣬱ÈÈçÖ¸¶¨ÏìÓ¦µÄ״̬Â룬¾ÍÏñÏÂÃæÕâ¸öÀý×ÓÒ»Ñù£¨Àý×ÓÀ´×Ô¹Ù·½Îĵµ£©£º

Õâ¸öÀý×ÓÑÝʾÁË·ÃÎÊPOSTÇëÇóµÄ²ÎÊýÒÔ¼°·µ»Ø403¡£ÄãÒ²¿ÉÒÔÖØÐ¹¹ÔìÒ»¸öpecan.Response¶ÔÏó×÷Ϊ·µ»ØÖµ£¨Àý×ÓÀ´×Ô¹Ù·½Îĵµ£©£º

ÁíÍ⣬HTTPÇëÇóµÄ²ÎÊýÒ²»á¿ÉÒÔ×÷Ϊ¿ØÖÆÆ÷·½·¨µÄ²ÎÊý£¬»¹ÊÇÀ´¿´¼¸¸ö¹Ù·½ÎĵµµÄÀý×Ó£º

Õâ¸ö¿ØÖÆÆ÷Öеķ½·¨Ö±½Ó·µ»ØÁ˲ÎÊý£¬ÑÝʾÁ˶ÔGETÇëÇó²ÎÊýµÄ´¦Àí£¬Ð§¹ûÊÇÕâÑùµÄ£º

ÓÐʱºò£¬²ÎÊýÒ²¿ÉÄÜÊÇURLµÄÒ»²¿·Ö£¬±ÈÈç×îºóµÄÒ»¶Îpath×÷Ϊ²ÎÊý£¬¾ÍÏñÏÂÃæÕâÑù£º

Ч¹ûÊÇÕâÑùµÄ£º

ÁíÍ⣬ÎÒÃÇ»¹Òª¿´Ò»ÏÂPOST·½·¨µÄ²ÎÊýÈçºÎ´¦Àí£¨Àý×ÓÀ´×Ô¹Ù·½Îĵµ£©£º

Ч¹ûÈçÏ£¬¾ÍÊǰÑHTTP body½âÎö³ÉÁË¿ØÖÆÆ÷·½·¨µÄ²ÎÊý£º

·µ»ØJSON»¹ÊÇHTML£¿

Èç¹ûÄã²»ÊÇÃ÷È·µÄ·µ»ØÒ»¸öResponse¶ÔÏó£¬ÄÇôPecanÖз½·¨µÄ·µ»ØÄÚÈÝÀàÐ;ÍÊÇÓÉexpose()×°ÊÎÆ÷¾ö¶¨µÄ¡£Ä¬ÈÏÇé¿öÏ£¬¿ØÖÆÆ÷µÄ·½·¨·µ»ØµÄcontent-typeÊÇHTML¡£

Ч¹ûÈçÏ£º

Ò²¿ÉÒÔÈÃËü·µ»ØJSON£º

Ч¹ûÈçÏ£º

ÉõÖÁ£¬Ä㻹¿ÉÒÔÈÃÒ»¸ö¿ØÖÆÆ÷·½·¨¸ù¾ÝURL pathµÄÀ´¾ö¶¨ÊÇ·µ»ØHTML»¹ÊÇJSON£º

·µ»ØJSON£º

ÕâÀïҪעÒâһϣº

(1)ͬһ¸ö×Ö·û´®×÷ΪJSON·µ»ØºÍ×÷ΪHTML·µ»ØÊDz»Ò»ÑùµÄ£¬×Ðϸ¿´Ò»ÏÂHTTPÏìÓ¦µÄÄÚÈÝ¡£ (2)ÎÒÃǵÄÀý×ÓÖÐÔÚURLµÄ×îºó¼ÓÉÏÁË.htmlºó׺»òÕß.jsonºó׺£¬Çë³¢ÊÔһϲ»¼Óºó׺µÄ»¯ÊÇ·µ»ØÊ²Ã´£¿È»ºó£¬µ÷»»Ò»ÏÂÁ½¸öexpose()µÄ˳ÐòÔÙÊÔһϡ£

´ÓÉÏÃæµÄÀý×Ó¿ÉÒÔ¿´³ö£¬¾ö¶¨ÏìÓ¦ÀàÐ͵ÄÖ÷ÒªÊÇ´«µÝ¸øexpose()º¯ÊýµÄ²ÎÊý£¬ÎÒÃÇ¿´ÏÂexpose()º¯ÊýµÄÍêÕûÉùÃ÷£º

(1)template²ÎÊýÓÃÀ´Ö¸¶¨·µ»ØÖµµÄÄ£°å£¬Èç¹ûÊÇ¡¯json¡¯¾Í»á·µ»ØJSONÄÚÈÝ£¬ÕâÀï¿ÉÒÔÖ¸¶¨Ò»¸öHTMLÎļþ£¬»òÕßÖ¸¶¨Ò»¸ömakoÄ£°å¡£

(2)content_typeÖ¸¶¨ÏìÓ¦µÄcontent-type£¬Ä¬ÈÏÖµÊÇ¡¯text/html¡¯¡£

(3)generic²ÎÊý±íÃ÷¸Ã·½·¨ÊÇÒ»¸ö¡°·ºÐÍ¡±·½·¨£¬¿ÉÒÔÖ¸¶¨¶à¸ö²»Í¬µÄº¯Êý¶ÔӦͬһ¸ö·¾¶µÄ²»Í¬µÄHTTP·½·¨¡£

¿´¹ý²ÎÊýµÄ½âÊͺó£¬ÄãÓ¦¸ÃÄÜ´ó¸ÅÁ˽âexpose()º¯ÊýÊÇÈçºÎ¿ØÖÆHTTPÏìÓ¦µÄÄÚÈݺÍÀàÐ͵ġ£

ÓÃWSMEÀ´×öʲô£¿

ÉÏÃæÁ½½ÚÒѾ­ËµÃ÷ÁËPecan¿ÉÒԱȽϺõĴ¦ÀíHTTPÇëÇóÖеIJÎÊýÒÔ¼°¿ØÖÆHTTP·µ»ØÖµ¡£ÄÇôΪʲôÎÒÃÇ»¹ÐèÒªWSMEÄØ£¿ÒòΪPecanÔÚ×ö ÏÂÃæÕâ¸öÊÂÇéµÄʱºò±È½ÏÂé·³£ºÇëÇó²ÎÊýºÍÏìÓ¦ÄÚÈݵÄÀàÐͼì²é£¨Ó¢Îļò³Æ¾ÍÊÇtyping£©¡£µ±È»£¬×öÊÇ¿ÉÒÔ×öµÄ£¬²»¹ýÄãÐèÒª×Ô¼º·ÃÎÊpecan.requestºÍpecan.response£¬È»ºó¼ì²éÖ¸¶¨µÄÖµµÄÀàÐÍ¡£WSME¾ÍÊÇΪ½â¾öÕâ¸öÎÊÌâ¶øÉúµÄ£¬¶øÇÒÊÊÓó¡¾°¾ÍÊÇRESTful API¡£

WSME¼ò½é

WSMEµÄÈ«³ÆÊÇWeb Service Made Easy£¬ÊÇרÃÅÓÃÓÚʵÏÖREST·þÎñµÄtyping¿â£¬ ÈÃÄã²»ÐèÒªÖ±½Ó²Ù×÷ÇëÇóºÍÏìÓ¦£¬¶øÇҸպúÍPecan½áºÏµÃ·Ç³£ºÃ£¬ËùÒÔ£¬OpenStackµÄºÜ¶àÏîÄ¿¶¼Ê¹ÓÃÁËPecan + WSMEµÄ×éºÏÀ´ÊµÏÖAPI£¨ºÃ°É£¬ÎÒ¿´¹ýµÄÏîÄ¿£¬ÓÃÁËPecanµÄ¶¼ÓÃÁËWSME£©¡£WSMEµÄÀíÄîÊÇ£ºÔڴ󲿷ÖÇé¿öÏ£¬Web·þÎñµÄÊäÈëºÍÊä³ö¶ÔÊý¾Ý ÀàÐ͵ÄÒªÇó¶¼ÊÇÑϸñµÄ¡£ËùÒÔËü¾ÍרÃŽâ¾öÁËÕâ¸öÊÂÇ飬Ȼºó°ÑÆäËûÊÂÇé¶¼½»¸øÆäËû¿ò¼ÜȥʵÏÖ¡£Òò´Ë£¬Ò»°ãWSME¶¼ÊÇºÍÆäËû¿ò¼ÜÅäºÏʹÓõģ¬Ö§³Ö Pecan¡¢FlaskµÈ¡£WSMEµÄÎĵµµØÖ·¡£

WSMEµÄʹÓÃ

ÓÃÁËWSMEºóµÄºÃ´¦ÊÇÊ²Ã´ÄØ£¿WSME»á×Ô¶¯°ïÄã¼ì²éHTTPÇëÇóºÍÏìÓ¦ÖеÄÊý¾ÝÊÇ·ñ·ûºÏÔ¤ÏÈÉ趨ºÃµÄÒªÇó¡£WSMEµÄÖ÷Òª·½Ê½ÊÇͨ¹ý×°ÊÎÆ÷À´¿ØÖÆcontroller·½·¨µÄÊäÈëºÍÊä³ö¡£WSMEÖÐÖ÷ҪʹÓÃÁ½¸ö¿ØÖÆÆ÷£º

(1) @signature: Õâ¸ö×°ÊÎÆ÷ÓÃÀ´ÃèÊöÒ»¸öº¯ÊýµÄÊäÈëºÍÊä³ö¡£ (2)@wsexpose: Õâ¸ö×°ÊÎÆ÷°üº¬@signatureµÄ¹¦ÄÜ£¬Í¬Ê±»á°Ñº¯ÊýµÄ·ÓÉÐÅÏ¢±©Â¶¸øWeb¿ò¼Ü£¬Ð§¹û¾ÍÏñPecanµÄexpose×°ÊÎÆ÷¡£

ÕâÀïÎÒÃǽáºÏPecanÀ´½²½âWSMEµÄʹÓá£ÏÈÀ´¿´Ò»¸öԭʼÀàÐ͵ÄÀý×Ó£º

Èç¹û²»Ìṩ²ÎÊý£¬·ÃÎÊ»áʧ°Ü£º

Èç¹ûÌṩµÄ²ÎÊý²»ÊÇÕûÐÍ£¬·ÃÎÊÒ²»áʧ°Ü£º

ÉÏÃæÕâЩ´íÎóÐÅÏ¢¶¼ÊÇÓÉWSME¿ò¼ÜÖ±½Ó·µ»ØµÄ£¬»¹Ã»ÓÐÖ´Ðе½ÄãдµÄ·½·¨¡£Èç¹ûÇëÇóÕýÈ·£¬ÄÇô»áÊÇÕâÑùµÄ£º

Çë×¢Òâ·µ»ØµÄcontent-type£¬ÕâÀï·µ»ØJSONÊÇÒòΪÎÒÃÇʹÓõÄwsexposeÉèÖõķµ»ØÀàÐÍÊÇXMLºÍJSON£¬²¢ÇÒJSONÊÇĬÈÏÖµ¡£ÉÏÃæÕâ¸öÀý×Ó¾ÍÊÇWSME×î¼òµ¥µÄÓ¦ÓÃÁË¡£

ÄÇôÏÖÔÚÓÐÏÂÃæÕâЩÎÊÌâÐèҪ˼¿¼Ò»Ï£º

(1) Èç¹ûÏëÓÃPOSTµÄ·½Ê½À´´«µÝ²ÎÊý£¬ÒªÔõô×öÄØ£¿Ìáʾ£ºÒªÔĶÁWSMEÖÐ@signature×°ÊÎÆ÷µÄÎĵµ¡£

(2)Èç¹ûÎÒÏ£ÍûʹÓÃ/test/1ÕâÖÖ·½Ê½À´´«µÝ²ÎÊýÒªÔõô×öÄØ£¿Ìáʾ£ºÒªÔĶÁPecanÎĵµÖйØÓÚ·ÓɵIJ¿·Ö¡£

(3)WSMEÖÐÖ§³Ö¶ÔÄÄЩÀàÐ͵ļì²éÄØ£¿WSMEÖ§³ÖÕûÐÍ¡¢¸¡µãÐÍ¡¢×Ö·û´®¡¢²¼¶ûÐÍ¡¢ÈÕÆÚʱ¼äµÈ£¬ÉõÖÁ»¹Ö§³ÖÓû§×Ô¶¨ÒåÀàÐÍ¡£Ìáʾ£ºÒªÔĶÁWSMEÎĵµÖйØÓÚÀàÐ͵IJ¿·Ö¡£

(4)WSMEÖ§³ÖÊý×éÀàÐÍô£¿Ö§³Ö¡£

ÉÏÃæµÄÎÊÌâÆäʵҲÊǺܶàÈËʹÓÃWSMEµÄʱºò¾­³£ÎʵÄÎÊÌâ¡£ÎÒÃǽ«ÔÚÏÂһƪÎÄÕÂÖÐʹÓÃPecan + WSMEÀ´¼ÌÐø¿ª·¢ÎÒÃǵÄdemo£¬²¢ÇÒÓôúÂëÀ´»Ø´ðÉÏÃæËùÓеÄÎÊÌâ¡£

 

 
 
 
 
 
 
 
   
2391 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þµÄ˼¿¼
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS
Ïà¹ØÅàѵ¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
ijÑз¢ÖÐÐÄ Openstackʵ¼ù
ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
ÔÆ¼ÆËãÓëWindows AzureÅàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ