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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
RESTful HTTPµÄʵ¼ù
 
×÷ÕߣºGregor Roth »ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2015-3-20
  4491  次浏览      27
 

±¾ÎĶÔRESTful HTTPµÄ»ù´¡Ô­Àí×öÁËÒ»¸ö¸ÅÀÀ£¬Ì½ÌÖÁË¿ª·¢ÕßÔÚÉè¼ÆRESTful HTTPÓ¦ÓÃʱËùÃæÁٵĵäÐÍÎÊÌ⣬չʾÁËÈçºÎÔÚʵ¼ùÖÐÓ¦ÓÃREST¼Ü¹¹·ç¸ñ£¬ÃèÊöÁ˳£ÓõÄURIÃüÃû·½·¨£¬ÌÖÂÛÁËÈçºÎʹÓÃͳһ½Ó¿Ú½øÐÐ×ÊÔ´½»»¥£¬ºÎʱʹÓÃPUT»òPOSTÒÔ¼°ÈçºÎÖ§³Ö·ÇCURD²Ù×÷µÈ¡£

RESTÊÇÒ»ÖÖ·ç¸ñ£¬¶ø²»ÊDZê×¼¡£ÒòΪ¼ÈûÓÐREST RFC£¬Ò²Ã»ÓÐRESTЭÒ鹿·¶»òÕßÀàËÆµÄ¹æ¶¨¡£REST¼Ü¹¹ÊÇRoy Fielding£¨ËûÒ²ÊÇHTTPºÍURI¹æ·¶µÄÖ÷Òª×÷ÕßÖ®Ò»£©ÔÚһƪÂÛÎÄÖÐÃèÊöµÄ¡£ÏñRESTÕâÑùµÄ¼Ü¹¹·ç¸ñͨ³£»á¶¨ÒåÒ»×é¸ß²ã¾ö¶¨ÈÃÓ¦ÓóÌÐòȥʵÏÖ¡£ËùÓÐʵÏÖÁËijÖÖÌØ¶¨¼Ü¹¹·ç¸ñµÄÓ¦ÓóÌÐò£¬¶¼Ê¹ÓÃÏàͬµÄģʽ£¬Ò²ÓÃÏàͬµÄ·½Ê½Ê¹ÓñðµÄ¼Ü¹¹ÔªËØ£¬È绺´æ£¬·Ö²¼Ê½²ßÂԵȡ£Roy Fielding°ÑREST¶¨Òå³ÉÒ»Öּܹ¹·ç¸ñ£¬ÆäÄ¿±êÊÇ¡°Ê¹ÑÓ³ÙºÍÍøÂç½»»¥×îС»¯£¬Í¬Ê±Ê¹×é¼þʵÏֵĶÀÁ¢ÐÔºÍÀ©Õ¹ÐÔ×î´ó»¯¡±

ËäÈ»RESTÊÜWeb¼¼ÊõµÄÓ°ÏìºÜÉµ«ÊÇÀíÂÛÉÏREST¼Ü¹¹·ç¸ñ²¢·Ç°ó¶¨ÔÚHTTPÉÏ¡£È»¶ø£¬HTTPÊÇΨһÓëRESTÏà¹ØµÄʵÀý¡£»ùÓÚ¸ÃÔ­Òò£¬±¾ÎÄÃèÊöÁËͨ¹ýHTTPʵÏÖµÄREST£¬Í¨³£ËüÒ²±»³ÆÎªRESTful HTTP¡£

REST²¢Ã»Óд´Ôìеļ¼Êõ£¬×é¼þ»ò·þÎñ£¬Òþ²ØÔÚRESTful HTTP±³ºóµÄÀíÄîÊÇʹÓÃWebµÄÏÖÓÐÌØÕ÷ºÍÄÜÁ¦¡£RESTful HTTP¶¨ÒåÁËÈçºÎ¸üºÃµØÊ¹ÓÃÏÖÓÐWeb±ê×¼ÖеÄһЩ׼ÔòºÍÔ¼Êø¡£

×ÊÔ´

×ÊÔ´ÊÇRESTÖÐ×î¹Ø¼üµÄ³éÏó¸ÅÄËüÃÇÊÇÄܹ»±»Ô¶³Ì·ÃÎʵÄÓ¦ÓóÌÐò¶ÔÏó¡£Ò»¸ö×ÊÔ´¾ÍÊÇÒ»¸ö±êʶµ¥Î»£¬ÈκοÉÒÔ±»·ÃÎÊ»ò±»Ô¶³Ì²Ù×ݵĶ«Î÷¶¼¿ÉÄÜÊÇÒ»¸ö×ÊÔ´¡£×ÊÔ´¿ÉÒÔÊǾ²Ì¬µÄ£¬Ò²¾ÍÊǸÃ×ÊÔ´µÄ״̬ÓÀÔ¶²»»á¸Ä±ä¡£Ïà·´£¬Ä³Ð©×ÊÔ´µÄ״̬¿ÉÄÜËæ×Åʱ¼äÍÆÒÆ³ÊÏֺܴóµÄ¿É±äÐÔ¡£ÕâÁ½ÖÖÀàÐ͵Ä×ÊÔ´¶¼ÊÇÓÐЧµÄ¡£

ͼ1ÖÐËùÏÔʾµÄÕâЩÀà¶¼Äܱ»ºÜÈÝÒ×µØÓ³Éä³É×ÊÔ´¡£ÃæÏò¶ÔÏóÉè¼ÆÕß²»ÈÝÒ×Àí½â°ÑʵÌåÀࣨÈçHotel»òÕßRoom£©Ó³Éä³É×ÊÔ´£¬Í¬ÑùËûÃÇÒ²²»Ì«Àí½â´Ó¿ØÖÆÀࣨÈçcoordination£¬ÊÂÎñºÍij¸öÀàµÄ¿ØÖÆÀࣩµ½×ÊÔ´µÄÓ³Éä¡£

ͼ1£º·ÖÎöÄ£Ð͵ÄÀý×Ó

·ÖÎöÄ£ÐÍÊÇʶ±ð×ÊÔ´µÄÒ»¸ö·Ç³£ºÃµÄ¡°ÇÐÈëµã¡±¡£È»¶ø£¬²¢·ÇÖ»ÄܽøÐÐ1¶Ô1Ó³É䣬±ÈÈ磬 <Hotel>.listOccupancy()²Ù×÷Ò²¿ÉÒÔ±»½¨Ä£³É×ÊÔ´¡£´ËÍ⣬ҲÓпÉÄÜijЩ×ÊÔ´Ö»±íʾʵÌåµÄijһ²¿·Ö¡£×ÊÔ´Éè¼ÆµÄÖ÷ÒªÇý¶¯Á¦ÊÇÍøÂçÒòËØ¶ø²»ÊǶÔÏóÄ£ÐÍ¡£

ÈκÎÖØÒªµÄ×ÊÔ´¶¼Ó¦¸ÃÄܹ»Í¨¹ýÒ»¸öΨһµÄ±êʶ±»·ÃÎÊ¡£RESTful HTTPʹÓÃURIÀ´Ê¶±ð×ÊÔ´¡£URIÌṩÁËWebͨÓõÄʶ±ð»úÖÆ£¬Ëü°üº¬Á˿ͻ§¶ËÖ±½ÓÓë±»ÒýÓõÄ×ÊÔ´½øÐн»»¥Ê±ÐèÒªµÄËùÓÐÐÅÏ¢¡£

ÈçºÎÃüÃû×ÊÔ´±êʶ£¿

ËäÈ»RESTful HTTP²¢Ã»ÓÐÃ÷È·Ö¸³öÈçºÎ¹¹ÔìÒ»¸öURI·¾¶£¬µ«Êµ¼ÊÉϾ­³£±»Ê¹ÓõÄÊÇÒ»Ð©ÌØ¶¨µÄÃüÃûģʽ¡£URIÃüÃûģʽÓÐÖúÓÚÓ¦ÓóÌÐòµ÷ÊԺ͸ú×Ù£¬Í¨³£Ò»¸öURI°üº¬×ÊÔ´ÀàÐͼ°ÆäºóÃæÓÃÓÚ¶¨Î»Ìض¨×ÊÔ´µÄ±êʶ¡£ÕâÑùµÄURI²»°üÀ¨Ö¸¶¨ÒµÎñ²Ù×÷µÄ¶¯´Ê£¨verb£©£¬¶øÖ»ÓÃÓÚ¶¨Î»×ÊÔ´¡£Í¼ÖÐa1¸ø³öÁËHotel×ÊÔ´µÄÒ»¸öʾÀý£¬Í¬Ò»¸öHotel×ÊÔ´Ò²¿ÉÒÔͨ¹ýURI£¨a2£©·ÃÎÊ¡£Í¬Ò»×ÊÔ´¿ÉÒÔ±»¶à¸öURIÒýÓá£

(a1) http://localhost/hotel/656bcee2-28d2-404b-891b

(a2) http://127.0.0.1/hotel/656bcee2-28d2-404b-891b

(b) http://localhost/hotel/656bcee2-28d2-404b-891b/Room/4

(c) http://localhost/hotel/656bcee2-28d2-404b-891b/Reservation/15

(d) http://localhost/hotel/656bcee2-28d2-404b-891b/Room/4/Reservation/15

(e) http://localhost/hotel/656bcee2-28d2-404b-891b/Room/4/Reservation/15v7

(f) http://localhost/hotel/656bcee2-28d2-404b-891bv12

ͼ2£º×ÊԴѰַµÄÀý×Ó

URIÒ²¿ÉÒÔ±»×ÊÔ´ÓÃÀ´ÔÚ×ÊÔ´±íʾ£¨representation£©Ö®¼ä½¨Á¢¹ØÁª¡£ÀýÈ磬Hotel±íʾͨ¹ýURIÈ¥ÒýÓÃÒÑ·ÖÅäµÄRoom×ÊÔ´£¬¶ø²»ÊÇʹÓÃÆÕͨµÄRoomID¡£Ê¹ÓÃÆÕͨµÄID»áÇ¿ÖÆµ÷ÓÃÕßͨ¹ý¶Ô×ÊÔ´µÄ·ÃÎÊÈ¥¹¹ÔìURI£¬¶øµ÷ÓÃÕßÈç¹ûûÓÐÖ÷»úÃûºÍ»ù´¡URI·¾¶µÈÉÏÏÂÎÄÐÅÏ¢ÊÇÎÞ·¨·ÃÎʵ½¸Ã×ÊÔ´µÄ¡£

³¬Á´½Ó³£±»¿Í»§¶ËÓÃÓÚ×ÊÔ´µ¼º½¡£RESTful APIÊdz¬Îı¾Çý¶¯µÄ£¬Õâ±íʾ¿Í»§¶Ëͨ¹ý»ñµÃÒ»¸öHotel±íʾ£¬¾ÍÄܹ»µ¼º½µ½ÒÑ·ÖÅäµÄRoom±íʾºÍReservation±íʾ¡£

ÔÚʵ¼ùÖУ¬Í¼1ËùʾµÄÕâЩÀྭ³£±»Ó³Éä³ÉijÖÖÒµÎñ¶ÔÏó£¬ÕâÒâζ×ÅÔÚÒµÎñ¶ÔÏóµÄÕû¸öÉúÃüÖÜÆÚÖÐURI½«±£³Ö²»±ä¡£Èç¹ûÒª´´½¨Ò»¸öÐÂ×ÊÔ´£¬ÔòҪΪ֮·ÖÅäÒ»¸öеÄURI¡£¶øÒ»µ©Õâ¸öÐÂ×ÊÔ´±»É¾³ý£¬ÏàÓ¦µÄURIÔò¸ú×ÅʧЧ¡£Èçͼ2Öеģ¨a£©£¬£¨b£©£¬£¨c£©ºÍ£¨d£©¾ÍÊÇÕâÖÖ±êʶµÄÀý×Ó¡£ÁíÒ»·½Ã棬URIÒ²¿ÉÒÔÓÃÀ´ÒýÓÃ×ÊÔ´¿ìÕÕ£¬±ÈÈ磨e£©ºÍ£¨f£©¾ÍÊǶÔÕâÀà¿ìÕÕµÄÒýÓã¬ÆäURIÖаüº¬ÁËÒ»¸ö°æ±¾±êʶ¡£

URI»¹¿ÉÒÔ¶¨Î»×Ó×ÊÔ´£¬ÈçʾÀýÖеģ¨b£©£¬£¨c£©£¬£¨d£©ºÍ£¨e£©¡£Í¨³££¬±»¾Û¼¯µÄ¶ÔÏó»á±»Ó³Éä³É×Ó×ÊÔ´£¬ÈçRoomÊDZ»Hotel¾Û¼¯µÄ¡£±»¾Û¼¯µÄ¶ÔÏóͨ³£Ã»ÓÐ×Ô¼ºµÄÉúÃüÖÜÆÚ£¬Èç¹ûËüµÄ¸¸¶ÔÏó±»É¾³ý£¬ËùÓеı»¾Û¼¯¶ÔÏóÒ²¸ú×ű»É¾³ý¡£

È»¶ø£¬Èç¹ûÒ»¸ö×Ó×ÊÔ´¿ÉÒÔ´ÓÒ»¸ö¸¸×ÊÔ´ÒÆ¶¯µ½ÁíÒ»¸ö¸¸¶ÔÏó£¬ ÄÇôÔÚËüµÄURIÖоͲ»Ó¦¸Ã°üº¬Æä¸¸×ÊÔ´µÄ±êʶ¡£±ÈÈçͼ1ÖеÄReservation×ÊÔ´£¬Ëü¾Í¿ÉÒÔ±»·ÖÅ䏸ÁíÒ»¸öRoom×ÊÔ´¡£Èç¹ûÒ»¸öReservation×ÊÔ´µÄURI°üº¬ÁËÆä¸¸×ÊÔ´RoomµÄ±êʶ£¬È磨d£©Ëùʾ£¬Ôòµ±RoomʵÀý±êʶ¸Ä±äʱ£¬Èç¹û¸ÃReservation×ÊÔ´ÓÖ±»ÁíÒ»¸ö×ÊÔ´ÒýÓõϰ£¬Õâ¾Í»á³öÎÊÌ⡣ΪÁ˱ÜÃâÎÞЧµÄURI£¬ReservationÓ¦¸Ãͨ¹ý£¨c£©ÕâÑùµÄ·½Ê½½øÐÐѰַ¡£

ͨ³££¬×ÊÔ´µÄURIÊÇÓÉ·þÎñÆ÷¿ØÖƵġ£¿Í»§¶Ë·ÃÎÊ×ÊԴʱ²¢²»ÐèÒªÀí½â×ÊÔ´µÄURIÃüÃû¿Õ¼ä½á¹¹¡£±ÈÈ磬ʹÓã¨c£©ºÍ£¨d£©Á½¸öURI½á¹¹¶Ô¿Í»§¶Ë¶øÑÔ¾ßÓÐЧ¹ûÏàͬ¡£

ͳһ×ÊÔ´½Ó¿Ú

ΪÁ˼ò»¯ÕûÌåϵͳ¼Ü¹¹£¬REST¼Ü¹¹·ç¸ñ°üº¬ÁËͳһ½Ó¿ÚµÄ¸ÅÄͳһ½Ó¿Ú°üº¬Ò»×éÊÜÏÞµÄÁ¼¶¨ÒåµÄ²Ù×÷£¬ÓÉËüÃǽøÐÐ×ÊÔ´µÄ·ÃÎʺͲÙ×÷¡£²»ÂÛʲô×ÊÔ´£¬¶¼Ê¹ÓÃÏàͬµÄ½Ó¿Ú¡£¿Í»§¶ËÓëHotel£¬Room»òCreditScoreµÈ×ÊÔ´½»»¥Ê±Ê¹ÓõĽӿÚÊÇÒ»ÑùµÄ¡£Í³Ò»½Ó¿Ú¶ÀÁ¢ÓÚ×ÊÔ´µÄURI£¬²¢ÇÒÒ²²»ÐèÒªÀàËÆIDLµÄÎļþÈ¥ÃèÊö¿ÉÓõIJÙ×÷¡£

RESTful HTTPµÄ½Ó¿Ú·Ç³£Á÷ÐÐÇÒ¹ãΪʹÓá£Ëü°üº¬±ê×¼µÄHTTP·½·¨ÈçGET£¬PUTºÍPOST£¨ä¯ÀÀÆ÷ʹÓÃËü·¢³öÇëÇó²¢ÌáÈ¡Ò³Ãæ£©¡£²»ÐÒµÄÊÇ£¬ºÜ¶à¿ª·¢ÕßÈÏΪʵÏÖRESTfulÓ¦ÓþÍÊÇÓÃÒ»ÖÖÖ±½ÓʹÓÃHTTPµÄ·½Ê½£¬ÕâÖÖÀí½âÊÇ´íÎóµÄ¡£¾Ù¸öÀý×Ó£¬HTTP·½·¨µÄʵÏÖ±ØÐëÒª×ñÑ­HTTP¹æ·¶µÄ£¬¶øÍ¨¹ýGET·½·¨´´½¨»òÐ޸ĶÔÏóÊDz»×ñÊØHTTP¹æ·¶µÄ¡£

Ó¦ÓÃͳһ½Ó¿Ú

¹ØÓÚºÎʱÒÔ¼°ÈçºÎʹÓò»Í¬µÄHTTP¶¯´Ê£¨verb£©£¬ÔÚFieldingµÄÂÛÎÄÖÐûÓÐÈκαí¸ñ¡¢Áбí»òÆäËû·½Ê½µÄÃèÊö¡£¶ÔÓڴ󲿷ַ½·¨£¬ÈçGET»ò DELETE£¬Í¨¹ýÔĶÁHTTP¹æ·¶¾ÍÄÜÇå³þÆäº¬Ò壬¶ø¶ÔÓÚPOSTºÍ²¿·Ö¸üУ¬¾Í²»ÄÇôÈÝÒ×ÁË¡£ÔÚʵ¼ùÖУ¬¶Ô×ÊÔ´½øÐв¿·Ö¸üÐÂÓкü¸ÖÖ·½·¨£¬ÏÂÎĽ«ÓÐÏêϸ½éÉÜ¡£

±í1ÁгöÁ˴󲿷ÖÖØÒªµÄ·½·¨GET£¬DELETE£¬PUTºÍPOSTµÄµäÐÍÓ÷¨£º

±í1£ºÍ³Ò»½Ó¿ÚʾÀý

±íʾ

¶Ô×ÊÔ´µÄ²Ù×ÝÓÀÔ¶ÊÇͨ¹ýÆä±íʾʵÏֵġ£×ÊÔ´¿ÉÄÜÓÀÔ¶²»»áÔÚÍøÂçÖд«Ê䣬Ïà·´£¬´«ÊäµÄÊÇ×ÊÔ´µÄ±íʾ¡£×ÊÔ´µÄ±íʾ°üÀ¨Êý¾ÝºÍÃèÊöÊý¾ÝµÄÔªÊý¾Ý£¬ÀýÈ磬HTTPÍ·¡°Content-Type¡± ¾ÍÊÇÕâÑùÒ»¸öÔªÊý¾ÝÊôÐÔ¡£

ͼ3չʾÁËÈçºÎʹÓÃJava»ñÈ¡±íʾ¡£¸ÃÀý³ÌʹÓÃÁËJava HTTP¿âxLightwebÖеÄHttpClientÀ࣬Õâ¸ö¿âÓÉ×÷Õß±¾ÈËά»¤¡£

HttpClient httpClient = new HttpClient();

IHttpRequest request = new GetRequest(centralHotelURI);
IHttpResponse response = httpClient.call(request); 

ͼ3£º»ñÈ¡±íʾµÄJavaÀý³Ì

ͨ¹ýµ÷ÓÃHTTP¿Í»§¶ËµÄcall·½·¨£¬Ò»¸ö·ÃÎÊHotel×ÊÔ´±íʾµÄHTTPÇëÇó¾Í±»·¢ËͳöÈ¥¡£·µ»ØµÄ±íʾÈçͼ4Ëùʾ£¬ËüÒ²°üº¬ÁËÓÃÓÚָʾʵÌåÖ÷ÌåµÄ¶àýÌåÀàÐ͵ÄContent-TypeÍ·¡£

REQUEST:
GET /hotel/656bcee2-28d2-404b-891b HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6


RESPONSE:
HTTP/1.1 200 OK
Server: xLightweb/2.6
Content-Length: 277
Content-Type: application/x-www-form-urlencoded


classification=Comfort&name=Central&RoomURI=http%3A%2F%2Flocalhost%2Fhotel%2F
656bcee2-28d2-404b-891b%2FRoom%2F2&RoomURI=http%3A%2F%2Flocalhost%2Fhotel%2F6
56bcee2-28d2-404b-891b%2FRoom%2F1

ͼ4£ºRESTful HTTP½»»¥

ÈçºÎÖ§³ÖÌØ¶¨±íʾ£¿

ΪÁ˱ÜÃâ´«ÊäºÜ´óµÄÊý¾Ý¼¯£¬ÓÐʱӦ¸Ã½ÓÊÕ±íʾÊôÐÔÒ»¸ö×Ó¼¯¡£ÔÚʵÏÖʱ£¬ÓÃÓÚÖ¸¶¨²¿·ÖÊôÐÔµÄÒ»ÖÖ·½Ê½¾ÍÊÇÖ§³Ö¶ÔÖ¸¶¨ÊôÐÔµÄѰַ£¬Èçͼ5Ëùʾ¡£

REQUEST:
GET /hotel/656bcee2-28d2-404b-891b/classification HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Accept: application/x-www-form-urlencoded


RESPONSE:
HTTP/1.1 200 OK
Server: xLightweb/2.6
Content-Length: 26
Content-Type: application/x-www-form-urlencoded; charset=utf-8


classification=Comfort

ͼ5£ºÊôÐÔ¹ýÂË

ͼ5ÖÐËùʾµÄGETµ÷ÓÃÖ»ÇëÇóÁËÒ»¸öÊôÐÔ£¨classification£©£¬Èç¹ûÒªÇëÇó¶à¸öÊôÐÔ£¬ËùÇëÇóµÄÊôÐÔÒªÓöººÅ¸ô¿ª£¬Èçͼ6Ëùʾ¡£

REQUEST:
GET /hotel/656bcee2-28d2-404b-891b/classification,name HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Accept: application/x-www-form-urlencoded


RESPONSE:
HTTP/1.1 200 OK
Server: xLightweb/2.6
Content-Length: 43
Content-Type: application/x-www-form-urlencoded; charset=utf-8


classification=Comfort&name=Central

ͼ6£º¶àÊôÐÔ¹ýÂË

È·¶¨ËùÐèÊôÐÔµÄÁíÒ»ÖÖ·½·¨ÊÇʹÓòéѯ²ÎÊý£¬Í¨¹ýËüÁгöËùÇëÇóµÄÊôÐÔ£¬Èçͼ7Ëùʾ¡£²éѯ²ÎÊý½«ÓÃÓÚ¶¨Òå²éѯÌõ¼þÒÔ¼°¸ü¸´ÔӵĹýÂË»ò²éѯ׼Ôò¡£

REQUEST:
GET /hotel/656bcee2-28d2-404b-891b?reqAttr=classification&reqAttr=name HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Accept: application/x-www-form-urlencoded


RESPONSE:
HTTP/1.1 200 OK
Server: xLightweb/2.6
Content-Length: 43
Content-Type: application/x-www-form-urlencoded; charset=utf-8


classification=Comfort&name=Central

ͼ7£º²éѯ×Ö·û´®

ÔÚÉÏÊöÀý×ÓÖУ¬·þÎñÆ÷×ÜÊÇ·µ»ØÒÔapplication/x-www-form-urlencoded±àÂëµÄýÌåÀàÐ͵ıíʾ¡£¸ÃýÌåÀàÐͽ«ÊµÌå±àÂë³É¼üÖµ¶ÔÁÐ±í¡£¼üÖµ·½·¨Àí½âÆðÀ´ºÜÈÝÒ×£¬µ«È±µãÊÇ£¬Ëü²»ÊÊÓÃÓë¸ü¼Ó¸´ÔÓµÄÊý¾Ý½á¹¹¡£´ËÍ⣬ÕâÖÖýÌåÀàÐͲ»Ö§³Ö±êÁ¿Êý¾ÝÀàÐ͵İ󶨣¬ÈçInteger£¬Boolean£¬DateµÈ¡£»ùÓÚÕâ¸öÔ­Òò£¬Í¨³£Ê¹ÓÃXML£¬JSON»òAtomÀ´±íÕ÷×ÊÔ´£¨JSONҲûÓж¨ÒåDataÀàÐ͵İ󶨣©

HttpClient httpClient = new HttpClient();


IHttpRequest request = new GetRequest(centralHotelURI);
request.setHeader("Accept", "application/json");


IHttpResponse response = httpClient.call(request);


String jsonString = response.getBlockingBody().readString();
JSONObject jsonObject = (JSONObject) JSONSerializer.toJSON(jsonString);
HotelHotel= (Hotel) JSONObject.toBean(jsonObject, Hotel.class);

ͼ8£ºÇëÇóJSON±íʾ

ͨ¹ýÉèÖá°Accept¡±ÇëÇóÍ·£¬¿Í»§¶Ë¾Í¿ÉÒÔÇëÇóÖ¸¶¨µÄ±íʾ±àÂ롣ͼ8չʾÁËÈçºÎ¶Ôapplication/jsonÀàÐ͵ıíʾµÄÇëÇó¡£JSONlib½«°Ñͼ9ÖÐÏÔʾµÄ·µ»ØÏìÓ¦ÏûÏ¢Ó³Éä³ÉHotel bean¡£

REQUEST:
GET /hotel/656bcee2-28d2-404b-891b HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Accept: application/json


RESPONSE:
HTTP/1.1 200 OK
Server: xLightweb/2.6
Content-Length: 263
Content-Type: application/json; charset=utf-8


{"classification":"Comfort",
"name":"Central",
"RoomURI":["http://localhost/hotel/656bcee2-28d2-404b-891b/Room/1",
       "http://localhost/hotel/656bcee2-28d2-404b-891b/Room/2"]}

ͼ9£ºJSON±íʾ

ÈçºÎ±¨¸æ´íÎó£¿

µ±·þÎñÆ÷²»Ö§³ÖËùÇëÇóµÄ±íʾʱÔõô°ì£¿Í¼10չʾÁËÒ»¸öÇëÇóXML±íʾ×ÊÔ´µÄHTTP½»»¥£¬Èô·þÎñÆ÷²»Ö§³ÖÕâÖÖ±íʾ£¬Ëü½«·µ»ØÒ»¸öHTTP 406ÏìÓ¦£¬±íʾ¾Ü¾ø´¦Àí¸ÃÇëÇó¡£

REQUEST:
GET /hotel/656bcee2-28d2-404b-891b HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Accept: text/xml RESPONSE:
HTTP/1.1 406 No match for accept header
Server: xLightweb/2.6
Content-Length: 1468
Content-Type: text/html; charset=iso-8859-1 <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 406 No match for accept header</title>
</head>
<body>
<h2>HTTP ERROR: 406</h2><pre>No match for accept header</pre> ...
</body>
</html>

ͼ10£º²»Ö§³ÖµÄ±íʾ

RESTful HTTP·þÎñ¶Ë³ÌÐò±ØÐë¸ù¾ÝHTTP¹æ·¶·µ»Ø×´Ì¬Â롣״̬ÂëµÄµÚÒ»¸öÊý×Ö±êʶ·µ»ØÀàÐÍ£¬1xx±íʾÁÙʱÏìÓ¦£¬2xx±íʾ³É¹¦ÏìÓ¦ £¬3xx´ú±íת·¢£¬4xx±íʾ¿Í»§¶Ë´íÎó£¬5xx´ú±í·þÎñ¶Ë´íÎó¡£Ê¹ÓôíÎóµÄÏìÓ¦Â룬»òÕß×Ü·µ»Ø200ÏìÓ¦£¬²¢ÔÚÏûÏ¢Ö÷ÌåÖаüº¬Ìض¨Ó¦ÓóÌÐòµÄÏìÓ¦£¬ÕâÁ½ÖÖ×ö·¨¶¼ÊDz»ºÃµÄʵ¼ù¡£

¿Í»§´úÀíºÍÖнéÒ²Òª·ÖÎö·µ»ØÂë¡£ÀýÈ磬xLightweb HttpClientĬÈÏ»á°Ñ³Ö¾ÃµÄHTTPÁ¬½Ó±£´æÔÚÁ¬½Ó³ØÖУ¬µ±Ò»¸öHTTP½»»¥Íê³Éʱ£¬³Ö¾Ã»¯HTTPÁ¬½Ó¾ÍÓ¦·µ»Øµ½ÄÚ²¿Á¬½Ó³ØÒѱ¸ÖØÓ᣶øÖ»ÓÐÍêºÃµÄÁ¬½Ó²ÅÄܱ»·Å»ØÁ¬½Ó³Ø£¬±ÈÈ磬Èô·µ»ØÂëÊÇ5xx£¬ÄǸÃÁ¬½Ó¾Í²»»áÖØ»ØÁ¬½Ó³ØÁË¡£

ÓÐÊ±Ä³Ð©ÌØ¶¨µÄ¿Í»§¶ËÒªÇó¸ü¼ò½àµÄ·µ»ØÂë¡£Ò»ÖÖ·½·¨ÊÇÔö¼ÓÒ»¸öHTTPÍ·¡°X-Header¡±£¬ÓÃËüÀ´ÏêϸÃèÊöHTTP״̬Âë¡£

REQUEST:
POST /Guest/ HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Content-Length: 94
Content-Type: application/x-www-form-urlencoded


zip=30314&lastName=Gump&street=42+Plantation+Street&firstName=Forest&country=US&
city=Baytown&state=LA



RESPONSE:
HTTP/1.1 400 Bad Request
Server: xLightweb/2.6
Content-Length: 55
Content-Type: text/plain; charset=utf-8
X-Enhanced-Status: BAD_ADDR_ZIP


AddressException: bad zip code 99566

ͼ11£º¸½¼Ó״̬Âë

ͨ³£Ö»ÓÐÔÚ½øÐбà³ÌÎÊÌâÕï¶Ïʱ²ÅÐèÒªÏêϸµÄ´íÎóÂë¡£¾¡¹Ü±ÈÆðÏêϸµÄ´íÎóÂ룬HTTP״̬ÂëµÄÃèÊöÐÔ×ÜÊÇÒª²îºÜ¶à£¬µ«ÊÇÔÚ´ó¶àÊýÇé¿öÏ£¬ËüÃǶÔÓÚ¿Í»§¶ËÕýÈ·´¦ÀíÎÊÌâÒѾ­×ã¹»ÁË¡£ÁíÒ»ÖÖ·½·¨ÊÇÔÚÏìÓ¦Ö÷ÌåÖаüº¬ÏêϸµÄ´íÎóÂë¡£

PUT»¹ÊÇPOST£¿

½ÏÖ®Á÷ÐеÄRPC·½Ê½£¬HTTP·½·¨²»½ö½öÔÚ·½·¨ÃûÉÏÓÐËù²»Í¬£¬¶øÇÒHTTP·½·¨ÖеÄijЩÊôÐÔ£¨ÈçÃݵÈÐÔ£¬°²È«ÐԵȣ©Ò²°çÑÝ×ÅÖØÒªµÄ½ÇÉ«¡£²»Í¬µÄHTTP·½·¨µÄÃݵÈÐԺͰ²È«ÐÔÊôÐÔÒ²ÊDz»Í¬µÄ¡£

HttpClient httpClient = new HttpClient();


String[] params = new String[] { "firstName=Forest",
			    "lastName=Gump",
			    "street=42 Plantation Street",
			    "zip=30314",
			    "city=Baytown",
			    "state=LA",
			    "country=US"};
IHttpRequest request = new PutRequest(gumpURI, params);
IHttpResponse response = httpClient.call(request);

ͼ12£ºÊ¹ÓÃPUT·½·¨

Èçͼ12ºÍ13Ëùʾ£¬Ê¹ÓÃPUT²Ù×÷À´´´½¨Ò»¸öеÄGuest×ÊÔ´¡£PUT·½·¨½«·â×°ºÃµÄ×ÊÔ´´æ·ÅÔÚRequest-URI֮ϡ£¸ÃURIÊÇÓɿͻ§¶Ë¾ö¶¨µÄ£¬µ±Request-URIÖ¸ÏòijÏÖ´æ×ÊԴʱ£¬¸Ã×ÊÔ´½«±»ÐÂ×ÊÔ´Ìæ»»¡£»ùÓÚ¸ÃÔ­Òò£¬PUT·½·¨Ò»°ãÓÃÓÚ´´½¨ÐÂ×ÊÔ´»ò¸üÐÂÏÖÓÐ×ÊÔ´¡£È»¶ø£¬Í¨¹ýʹÓÃPUT£¬×ÊÔ´µÄÕû¸ö״̬¶¼»á±»¸Ä±ä£¬ÈôÒ»¸öÇëÇóÖ»ÐèÒªÐÞ¸ÄzipÓò£¬Ëü²»µÃ²»°üº¬¸Ã×ÊÔ´µÄÆäËûÓò£¬Èç firstName£¬cityµÈ¡£

REQUEST:
PUT Hotel/guest/bc45-9aa3-3f22d HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Content-Length: 94
Content-Type: application/x-www-form-urlencoded


zip=30314&lastName=Gump&street=42+Plantation+Street&firstName=Forest&country=US&
city=Baytown&state=LA



RESPONSE:
HTTP/1.1 200 OK
Server: xLightweb/2.6
Content-Length: 36
Content-Type: text/plain; charset=utf-8
Location: http://localhost/guest/bc45-9aa3-3f22d


The guest resource has been updated. 

ͼ13£ºHTTP PUT½»»¥

PUT·½·¨ÊÇÃݵȵģ¬ÃݵÈÐÔÒâζ×ŶÔÓÚÒ»¸ö³É¹¦Ö´ÐеÄÇëÇ󣬲»¹ÜÆäÖ´ÐжàÉٴΣ¬Æä½á¹û¶¼ÊÇÒ»Öµġ£Ò²¾ÍÊÇ˵£¬Ö»ÒªÄãÔ¸Ò⣬Äã¿ÉÒÔÓÃPUT·½·¨¶ÔHotel×ÊÔ´½øÐÐÈÎÒâ´Î¸üУ¬Æä½á¹û¶¼Ò»Ñù¡£Èç¹ûÁ½¸öPUT·½·¨Í¬Ê±·¢Éú£¬ÄÇôֻÓÐÆäÖÐÖ®Ò»»áÓ®µÃ×îºóµÄʤÀû²¢¾ö¶¨×ÊÔ´µÄ×îÖÕ״̬¡£É¾³ý²Ù×÷Ò²ÊÇÃݵȵģ¬Èç¹ûÒ»¸öPUT·½·¨ºÍDELETE·½·¨Í¬Ê±·¢Éú£¬ÄÇô×ÊÔ´»òÕß±»¸üУ¬»òÕß±»É¾³ý£¬¶ø²»¿ÉÄÜÍ£ÁôÔÚij¸öÖмä״̬¡£

Èç¹ûÄ㲻ȷ¶¨ÊÇPUT»¹ÊÇDELETE±»³É¹¦Ö´ÐУ¬²¢ÇÒûÓеõ½×´Ì¬Âë409 (Conflict)»òÕß 417 (Expectation Failed)µÄ»°£¬ÄÇô¾ÍÖØÐÂÖ´ÐÐÒ»±é¡£¶ø²»ÐèÒª¸½¼ÓµÄ¿É¿¿ÐÔЭÒéÀ´±ÜÃâÖØ¸´ÇëÇó£¬ÒòΪͨ³£Öظ´µÄÇëÇó²»»áÓÐÈκÎÓ°Ïì¡£

ÉÏÊöÃèÊö¶ÔÓÚPOST·½·¨¾Í²»ÊÊÓÃÁË£¬ÒòΪPOST·½·¨²»ÊÇÃݵȵģ¬ÈôÒªÁ½´ÎÖ´ÐÐͬһ¸öPOSTÇëÇóÄǾÍҪעÒâÁË¡£POST·½·¨ËùȱʧµÄÃݵÈÐԾͽâÊÍÁËΪʲôµ±Äãÿ´ÎÖØÐ·¢ËÍPOSTÇëÇóʱä¯ÀÀÆ÷×ÜÊǵ¯³ö¾¯¸æ¡£POST·½·¨ÓÃÓÚ´´½¨×ÊÔ´£¬¶ø²»ÐèÒªÓɿͻ§¶ËÖ¸¶¨ÊµÀýid£¬Í¼14չʾÁËͨ¹ýPOST·½·¨´´½¨Ò»¸öHotel×ÊÔ´µÄHTTP½»»¥¹ý³Ì¡£Í¨³££¬¿Í»§¶ËʹÓÃÖ»°üº¬»ù·¾¶ºÍ×ÊÔ´ÀàÐÍÃûµÄURIÀ´·¢ËÍPOSTÇëÇó¡£

REQUEST:
POST /HotelHTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Content-Length: 35
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Accept: text/plain


classification=Comfort&name=Central


RESPONSE:
HTTP/1.1 201 Created
Server: xLightweb/2.6
Content-Length: 40
Content-Type: text/plain; charset=utf-8
Location: http://localhost/hotel/656bcee2-28d2-404b-891b


the Hotelresource has been created

ͼ14£ºHTTP POST½»»¥£¨´´½¨£©

POST·½·¨Ò²¾­³£ÓÃÓÚ¸üÐÂ×ÊÔ´µÄ²¿·ÖÄÚÈÝ£¬±ÈÈ磬Èç¹ûÎÒÃÇҪͨ¹ý·¢Ëͽö°üº¬classificationÊôÐÔµÄPUTÇëÇóÈ¥¸üÐÂHotel×ÊÔ´µÄ»°£¬Õâ¾ÍÊÇÎ¥·´HTTPµÄ£¬µ«ÊÇÓÃPOST·½·¨ÔòûÓÐÎÊÌâ¡£POST·½·¨¼È²»ÊÇÃݵȵģ¬Ò²²»Êǰ²È«µÄ¡£Í¼15չʾÁËÒ»¸öÖ´Ðв¿·Ö¸üеÄPOST·½·¨¡£

REQUEST:
POST /hotel/0ae526f0-9c3d HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Content-Length: 19
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Accept: text/plain

classification=First+Class



RESPONSE:
HTTP/1.1 200 OK
Server: xLightweb/2.6
Content-Length: 52
Content-Type: text/plain; charset=utf-8


the Hotelresource has been updated (classification)

ͼ15£º HTTP POST½»»¥ £¨¸üУ©

»¹¿ÉÒÔʹÓÃPATCH·½·¨À´½øÐв¿·Ö¸üУ¬PATCH·½·¨ÊǶÔ×ÊÔ´½øÐв¿·Ö¸üеÄÒ»¸öÌØÊâ·½·¨¡£Ò»¸öPATCHÇëÇó°üº¬Ò»¸ö²¹¶¡Îĵµ£¬Ëü½«Ó¦ÓÃÓÚÓÉRequest-URIËùÖ¸¶¨µÄ×ÊÔ´¡£È»¶øPATCHµÄRFC¹æ·¶»¹ÔڲݸåÖС£

ʹÓÃHTTP»º´æ

ΪÌá¸ßÀ©Õ¹ÐÔ²¢½µµÍ·þÎñ¶Ë¸ºÔØ£¬ RESTfulµÄHTTPÓ¦ÓóÌÐò¿ÉÒÔÀûÓÃWEB»ù´¡ÉèÊ©µÄ»º´æ»úÖÆ¡£HTTPÒѾ­Òâʶµ½»º´æÊÇWEB»ù´¡ÉèÊ©±Ø²»¿ÉÉÙµÄÒ»²¿·Ö£¬±ÈÈ磬HTTPЭÒ鶨ÒåÁËרÃŵÄÏûϢͷÀ´Ö§³Ö»º´æ¡£Èç¹û·þÎñ¶ËÉèÖÃÁËÕâ¸öÍ·£¬¿Í»§¶Ë£¨ÈçHTTP¿Í»§¶Ë»òWeb»º´æ´úÀí£©¾ÍÄܹ»ÓÐЧµØÖ§³Ö»º´æ²ßÂÔ¡£

HttpClient httpClient = new HttpClient();
httpClient.setCacheMaxSizeKB(500000);


IHttpRequest request = new GetRequest(centralHotelURI + "/classification");
request.setHeader("Accept", "text/plain");


IHttpResponse response = httpClient.call(request);
String classification = response.getBlockingBody.readString();


// ... sometime later re-execute the request
response = httpClient.call(request);
classification = response.getBlockingBody.readString();

ͼ16£º¿Í»§¶Ë»º´æ½»»¥

ͼ16ÏÔʾÁËÒ»¸öÖØ¸´µÄGETµ÷Óá£Í¨¹ýÉèÖÃ×î´ó»º´æ´óСµÄÖµ>0¼¤»îÁËHttpClientµÄ»º´æ¹¦ÄÜ¡£Èç¹ûÏìÓ¦ÏûÏ¢Öаüº¬ÁËË¢ÐÂÍ·£¬±ÈÈçExpires»òCache-Control: max-age£¬¸ÃÏìÓ¦¾Í»á±»HttpClient»º´æ¡£ÕâЩͷָÃ÷Á˹ØÁªµÄ±íʾ¿ÉÒÔ±£ÏʵÄʱ¼äΪ¶à¾Ã¡£Èç¹ûÔÚÒ»¶Îʱ¼äÄÚ·¢³öÁËÏàͬµÄÇëÇó£¬ÄÇôHttpClient¾Í»áʹÓûº´æÎªÕâЩÇëÇóÌṩ·þÎñ£¬¶ø²»ÐèÒªÖØ¸´½øÐÐÍøÂçµ÷Óá£ÔÚÍøÂçÉÏ×ܹ²Ö»ÓÐÒ»´ÎHTTP½»»¥£¬Èçͼ17Ëùʾ¡£ÖîÈçWEB´úÀíÖ®ÀàµÄ»º´æÖнéҲʵÏÖÁËÏàͬµÄ¹¦ÄÜ£¬¶øÇҸûº´æ»¹¿ÉÒÔÔÚ²»Í¬¿Í»§¶ËÖ®¼ä¹²Ïí¡£

REQUEST:
GET /hotel/656bcee2-28d2-404b-891b/classification HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Accept: text/plain


RESPONSE:
HTTP/1.1 200 OK
Server: xLightweb/2.6
Cache-Control: public, max-age=60
Content-Length: 26
Content-Type: text/plain; charset=utf-8


comfort

ͼ17£º°üº¬¹ýÆÚÍ·µÄHTTPÏìÓ¦

¹ýÆÚÄ£ÐÍÔÚ¾²Ì¬×ÊÔ´ÉϺܺÃÓ㬿ÉÊÇ£¬¶ÔÓÚ¶¯Ì¬×ÊÔ´£¨×ÊԴ״̬¾­³£¸Ä±äÇÒÎÞ·¨Ô¤²â£©Ôò²»¾¡Ïàͬ¡£HTTPͨ¹ýÑé֤ͷ£¬ÈçLast-ModifiedÒÔ¼°ETagÀ´Ö§³Ö¶¯Ì¬×ÊÔ´µÄ»º´æ¡£Óë¹ýÆÚÄ£ÐÍÏà±È£¬Ñé֤ģÐÍûÓнÚÊ¡ÍøÂçµ÷Óᣵ«ÊÇ£¬µ±Ö´ÐдøÌõ¼þµÄGET·½·¨Ê±Ëü»á¶Ô°º¹óµÄ²Ù×÷½ÚÔ¼ÍøÂç´«Ê䣬ͼ 18£¨2.request£©ÏÔʾÁË´øÌõ¼þµÄGET²Ù×÷£¬Ëü´øÓÐÒ»¸ö¶îÍâµÄLast-ModifiedÍ·£¬Õâ¸öÍ·°üº¬ÁË»º´æ¶ÔÏó×îºóÐÞ¸ÄÈÕÆÚ¡£Èç¹û¸Ã×ÊԴδ±»¸ü¸Ä£¬·þÎñ¶Ë½«»á·µ»ØÒ»¸ö304 (Not Modified) ÏìÓ¦¡£

1. REQUEST:
GET /hotel/656bcee2-28d2-404b-891b/Reservation/1 HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Accept: application/x-www-form-urlencoded


1. RESPONSE:
HTTP/1.1 200 OK
Server: xLightweb/2.6
Content-Length: 252
Content-Type: application/x-www-form-urlencoded
Last-Modified: Mon, 01 Jun 2009 08:56:18 GMT


from=2009-06-01T09%3A49%3A09.718&to=2009-06-05T09%3A49%3A09.718&guestURI=
http%3A%2F%2Flocalhost%2Fguest%2Fbc45-9aa3-3f22d&RoomURI=http%3A%2F%2F
localhost%2Fhotel%2F656bcee2-28d2-404b-891b%2FRoom%2F1


2. REQUEST:
GET /hotel/0ae526f0-9c3d/Reservation/1 HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Accept: application/x-www-form-urlencoded
If-Modified-Since: Mon, 01 Jun 2009 08:56:18 GMT


2. RESPONSE:
HTTP/1.1 304 Not Modified
Server: xLightweb/2.6
Last-Modified: Mon, 01 Jun 2009 08:56:18 GMT

ͼ18£º»ùÓÚÑéÖ¤µÄ»º´æ

²»ÒªÔÚ·þÎñ¶Ë´æ´¢Ó¦ÓÃ״̬

RESTful HTTPµÄ½»»¥±ØÐëÊÇÎÞ״̬µÄ£¬Õâ±íÃ÷ÿһ´ÎÇëÇóÒª°üº¬´¦Àí¸ÃÇëÇóËùÐèµÄÒ»ÇÐÐÅÏ¢¡£¿Í»§¶Ë¸ºÔðά»¤Ó¦ÓÃ״̬¡£RESTful·þÎñ¶Ë²»ÐèÒªÔÚÇëÇó¼ä±£ÁôÓ¦ÓÃ״̬£¬·þÎñ¶Ë¸ºÔðά»¤×ÊԴ״̬¶ø²»ÊÇÓ¦ÓÃ״̬¡£·þÎñ¶ËºÍÖнéÄܹ»Àí½â¶ÀÁ¢µÄÇëÇóºÍÏìÓ¦¡£Web»º´æ´úÀíÓµÓÐÒ»ÇÐÕýÈ·´¦ÀíÇëÇóËùÐèµÄÐÅÏ¢²¢¹ÜÀíËüµÄ»º´æ¡£

ÕâÖÖÎÞ״̬µÄ·½·¨ÊÇʵÏÖ¸ßÀ©Õ¹ºÍ¸ß¿ÉÓÃÓ¦ÓõĻù±¾Ô­Ôò¡£Í¨³£ÎÞ״̬ʹµÃÿһ¸ö¿Í»§ÇëÇó¿ÉÒÔÓɲ»Í¬µÄ·þÎñÆ÷À´ÏìÓ¦£¬µ±Á÷Á¿Ôö¼Óʱ£¬ÐµķþÎñÆ÷¿ÉÒÔ¼Ó½øÀ´£¬¶øÈç¹ûij¸ö·þÎñÆ÷ʧ°Ü£¬ËüÒ²¿ÉÒÔ´Ó¼¯ÈºÖÐÒÆ³ý¡£ÈôÒªÁË½â¹ØÓÚ¸ºÔؾùºâÒÔ¼°¹ÊÕϻָ´·½ÃæµÄ¸üÏêϸÐÅÏ¢£¬Çë²Î¿¼ÕâÆªÎÄÕ·þÎñÆ÷¸ºÔؾùºâ¼Ü¹¹ ¡£

¶Ônon-CRED²Ù×÷µÄÖ§³Ö

¿ª·¢Õß¾­³£ÏëÁ˽âÈçºÎ½«non-CRUD£¨Create-Read-Update-Delete£©²Ù×÷Ó³Éäµ½×ÊÔ´¡£ÏÔÈ»£¬Create¡¢Read¡¢UpdateºÍDeleteµÈ²Ù×÷Äܹ»ºÜÈÝÒ×µØÓ³Éäµ½×ÊÔ´µÄ·½·¨¡£È»¶ø£¬ RESTful HTTP»¹²»½öÏÞÓÚÃæÏòCRUDµÄÓ¦Óá£

ͼ19: RESTful HTTP×ÊÔ´

¾ÍÈçͼ19ËùʾµÄcreditScoreCheck¶øÑÔ£¬ËüÌṩÁËÒ»¸önon-CRUD²Ù×÷creditScore(...)£¬¸Ã²Ù×÷½ÓÊÜÒ»¸öaddress£¬¼ÆËã³öscore²¢·µ»Ø¡£ÕâÑùµÄ²Ù×÷¿ÉÒÔͨ¹ýCreditScoreResourceʵÏÖ£¬¸Ã×ÊÔ´´ú±í׿ÆËãµÄ·µ»Ø¡£Í¼20չʾÁËÒ»¸öGET·½·¨£¬Ëü´«Èëaddress£¬È»ºóÌáÈ¡CreditScoreResource±íʾ£¬²éѯ²ÎÊý±»ÓÃÀ´Ö¸¶¨CreditScoreResource¡£GET·½·¨Êǰ²È«µÄ£¬²¢ÇÒ¿É»º´æ£¬ËùÌáËüºÜÊÊÓÃÓÚCreditScore CheckµÄcreditScore(...)·½·¨µÄ·Ç¹¦ÄÜÐÔÐÐΪ¡£¼ÆËãµÄ½á¹û¿ÉÒÔ»º´æÒ»¶Îʱ¼ä£¬Èçͼ20Ëùʾ£¬ÏìÓ¦°üº¬ÁËÒ»¸ö»º´æÍ·£¬Ëü֪ͨ¿Í»§¶ËºÍÖнéÖ´ÐÐÏìÓ¦»º´æ¡£

REQUEST:
GET /CreditScore/?zip=30314&lastName=Gump&street=42+Plantation+Street&
	      firstName=Forest&country=US&city=Baytown&state=LA HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Accept: application/x-www-form-urlencoded


RESPONSE:
HTTP/1.1 200 OK
Server: xLightweb/2.6
Content-Length: 31
Content-Type: application/x-www-form-urlencoded
Cache-Control: public, no-transform, max-age=300


scorecard=Excellent&points=92

ͼ20£ºNon-CRUD HTTP GET½»»¥

ÉÏÊöÀý×Ó»¹ÏÔʾÁËGET·½·¨µÄ¾ÖÏÞÐÔ¡£¾¡¹ÜHTTP¹æ·¶²¢Ã»ÓÐÖ¸¶¨URLµÄ×î´ó³¤¶È£¬µ«ÊÇʵ¼ÊÉϿͻ§¶Ë£¬ÖнéÒÔ¼°·þÎñ¶Ë¶ÔURLµÄ³¤¶È¶¼ÓÐÏÞÖÆ¡£»ùÓÚ´Ë£¬Í¨¹ýGETµÄ²éѯ²ÎÊý·¢ËÍÒ»¸öºÜ´óµÄʵÌå¿ÉÄÜ»áÒòΪÖнéºÍ·þÎñÆ÷¶ÔURL³¤¶ÈµÄÏÞÖÆ¶øÊ§°Ü¡£

ÁíÒ»½â¾ö·½·¨ÊÇʹÓÃPOST·½·¨£¬Èç¹û×÷ÁËÉèÖã¬ËüÒ²Êǿɻº´æµÄ¡£Èçͼ21Ëùʾ£¬µÚÒ»¸öPOSTÇëÇóµÄ½á¹ûÊÇ´´½¨ÁËÒ»¸öÐéÄâ×ÊÔ´CreditScoreResource¡£ÊäÈëµÄaddressÊý¾ÝÓÃtext/cardÕâ¸ömimeÀàÐͽøÐбàÂ룬ÔÚ·þÎñ¶Ë¼ÆËãµÃµ½scoreÖ®ºó£¬Ëü·¢»ØÒ»¸ö201£¨created£©ÏìÓ¦£¬¸ÃÏìÓ¦°üº¬×ÅËù´´½¨µÄCreditScoreResource×ÊÔ´µÄURI¡£ ʾÀýÖл¹Õ¹Ê¾ÁËÈç¹û½øÐÐÁËÉ趨£¬POSTÏìÓ¦Ò²¿ÉÒÔ±»»º´æ¡£Í¨¹ýÒ»¸öGETÇëÇó¾ÍÄܹ»È¡µ½¼ÆËã½á¹û¡£GETÏìÓ¦Ò²°üº¬Ò»¸ö»º´æ¿ØÖÆÍ·£¬Èç¹û¿Í»§¶Ë½ô½Ó×ÅÖØÐÂÖ´ÐÐÕâÁ½´ÎÇëÇó£¬ÄÇôËüÃǶ¼¿ÉÓÉ»º´æ½øÐÐÏìÓ¦¡£

1. REQUEST:
POST /CreditScore/ HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6
Content-Length: 198
Content-Type: text/x-vcard
Accept: application/x-www-form-urlencoded


BEGIN:VCARD
VERSION:2.1
N:Gump;Forest;;;;
FN:Forest Gump
ADR;HOME:;;42 Plantation St.;Baytown;LA;30314;US
LABEL;HOME;ENCODING=QUOTED-PRINTABLE:42 Plantation St.=0D=0A30314 Baytown=0D=0ALA US
END:VCARD


1. RESPONSE:
HTTP/1.1 201 Created
Server: xLightweb/2.6
Cache-Control: public, no-transform, max-age=300
Content-Length: 40
Content-Type: text/plain; charset=utf-8
Location: http://localhost/CreditScore/l00000001-l0000005c


the credit score resource has been created



2. REQUEST:
GET /CreditScore/l00000001-l0000005c HTTP/1.1
Host: localhost
User-Agent: xLightweb/2.6


2. RESPONSE:
HTTP/1.1 200 OK
Server: xLightweb/2.6
Content-Length: 31
Content-Type: application/x-www-form-urlencoded
Cache-Control: public, no-transform, max-age=300


scorecard=Excellent&points=92

ͼ21£º Non-CRUD HTTP POST½»»¥

»¹ÓÐÆäËû²»Í¬µÄʵÏÖ·½Ê½¡£±ÈÈç²»·µ»Ø201ÏìÓ¦£¬¶ø·µ»Ø301(Moved Permanently)ת·¢ÏìÓ¦¡£¸ÃÏìӦȱʡÊǿɻº´æµÄ¡£ÆäËû±ÜÃâ¶þ´ÎÇëÇóµÄ·½·¨ÊÇÔÚ201ÏìÓ¦ÖÐÔö¼ÓÒ»¸öд´½¨µÄCreditScoreResource×ÊÔ´µÄ±íʾ¡£

×ܽá

´ó¶àÊýSOA¼Ü¹¹£¨ÈçSOAP»òCORBA£©¶¼ÊÔͼӳÉäÈçͼ1ËùʾµÄÀàÄ£ÐÍ£¬»ò¶à»òÉÙÊÇÒ»¶ÔÒ»µÄÔ¶³Ì·ÃÎÊ¡£Í¨³££¬ÕâЩSOA¼Ü¹¹µÄ±È½Ï¶àµØ¹Ø×¢ÔÚ±à³ÌÓïÑÔ¶ÔÏóµÄ͸Ã÷Ó³ÉäÉÏ£¬ÕâÖÖÓ³ÉäºÜÈÝÒ×Àí½â£¬ÇÒÒ×ÓÚ¸ú×Ù¡£¿ÉÊÇ£¬ËüÃǰѶԷֲ¼ÐÔºÍÀ©Õ¹ÐԵȷ½ÃæµÄ¹Ø×¢ÅÅÔÚµÚ¶þλ¡£

Ïà·´£¬REST¼Ü¹¹·ç¸ñµÄ×îÖ÷ÒªÇý¶¯ÊÇ·Ö²¼ÐÔºÍÀ©Õ¹ÐÔ¡£RESTful HTTP½Ó¿ÚµÄÉè¼ÆÊÇÓÉÍøÂçÒòËØ¶ø·Ç±à³ÌÓïÑԵİó¶¨Çý¶¯µÄ¡£ RESTful HTTPҲûÓÐÊÔͼȥ·â×°ºÜÄÇЩÄÑÒþ²ØµÄÒòËØ£¬ÈçÍøÂçÑÓ³Ù£¬ÍøÂ罡׳ÐÔÒÔ¼°ÍøÂç´ø¿íµÈ¡£

RESTful HTTPÓ¦ÓÃÓÃÒ»ÖÖÖ±½ÓµÄ·½Ê½Ê¹ÓÃHTTPЭÒ飬¶ø²»ÐèÈκγéÏó²ã£¬Ò²²»´æÔÚRESTÖ¸¶¨µÄÊý¾ÝÓò£¬Èç´íÎóÓò£¬°²È«ÁîÅÆÓòµÈ¡£RESTful HTTPÓ¦ÓÃֻʹÓÃWEBµÄ¹ÌÓÐÄÜÁ¦¡£Éè¼ÆRESTful HTTPµÄ½Ó¿ÚÒâζ×ÅÔ¶³Ì½á¹¹µÄÉè¼ÆÕß±ØÐëÔÚHTTPЭÒéÉϽøÐÐ˼¿¼¡£Õâͨ³£Ôö¼ÓÁË¿ª·¢ÖÜÆÚÖжîÍâ²½Öè¡£

È»¶ø£¬RESTful HTTPʹµÃÓ¦ÓóÌÐòʵÏÖ¾ßÓиßÀ©Õ¹ÐÔ£¬¸ü½¡×³¡£ÌرðÊÇΪºÜ´óÓû§ÈºÌṩWebÓ¦ÓõĹ«Ë¾£¬Èç WebMailing»òSocialNetworkingµÄÓ¦ÓþÍÄÜ´ÓREST¼Ü¹¹·ç¸ñÖлñÒæ¡£Í¨³££¬ÕâЩӦÓÃÒª¸ü¿ì¸ü¸ßµØÀ©Õ¹£¬¶øÇÒ£¬ÕâЩ¹«Ë¾Í¨³£ÔÚһЩµÍÔ¤ËãµÄ»ù´¡ÉèÊ©£¨»ùÓڹ㷺ʹÓõıê×¼×é¼þºÍÈí¼þÖ®ÉÏ£©ÉÏÔËÐÐÓ¦Óá£

   
4491 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

¶àά·½·¨À´¿ª·¢ÓлúµÄÒµÎñÁ÷³Ì¼Ü¹¹
SCA Ó¦ÓóÌÐò¿ª·¢
BPM ºÍ SOA ÐÔÄÜ×î¼Ñʵ¼ù
ʵÏÖÆóÒµ·þÎñ×ÜÏßģʽ
Ïà¹ØÎĵµ

SCA½éÉܼ°Ó¦ÓÃʵÀý
»ùÓÚSOA¼Ü¹¹µÄESBƽ̨£ºInfomagic
SCA¼Ü¹¹
SOAµÄ»ù±¾¸ÅÄî
Ïà¹Ø¿Î³Ì

ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

»ùÓÚSOAµÄ¹¤×÷Á÷£¨WF£©ÕûºÏ
SOA 100ÎÊ - ÎÊÓë´ð
SOAP Ó¦ÓÃģʽ:´¦ÀíÓëÐÔÄÜ
ESB¼Ü¹¹Ö®Æóҵʵʩ°¸Àý
»ùÓÚSOA¼Ü¹¹µÄÆóÒµ¼¯³Éϵͳ
»ùÓÚSOAµÄÌåϵ¼Ü¹¹Éè¼Æ


ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
SOAÌåϵ½á¹¹Êµ¼ù


ijµÚÈý·½µç×ÓÖ§¸¶ÆóÒµ SOA¼Ü¹¹Éè¼Æ
ijµç×ÓÆóÒµ SOAÓ¦ÓÃ
ÖйúÒÆ¶¯ SOAÅàѵ
±±¾©´óѧ SOA¼Ü¹¹Éè¼ÆÊµ¼ù
ÓѰÏÕ SOA¼Ü¹¹Éè¼Æ
ÉϺ£ SOA¼Ü¹¹Êµ¼ù
ɽ¶«Òƶ¯Í¨ÐÅ SOAÌåϵ½á¹¹Êµ¼ù