Ê×Ò³
ѧϰ
»î¶¯
רÇø
¹¤¾ß
TVP
·¢²¼
¾«Ñ¡ÄÚÈÝ/¼¼ÊõÉçȺ/ÓŻݲúÆ·,¾¡ÔÚС³ÌÐò
Á¢¼´Ç°Íù

GraphQL vs REST API ¼Ü¹¹£¬Ë­¸üʤһ³ï£¿

2015Ä꣬ Facebook¿ªÔ´GraphQL?¡£ ´Ëºó£¬ËüÔÚÇ°¶ËWebÖдóÊÜ»¶Ó­¡£?´«Í³µÄREST APIÓкβ»×㣿GraphQLÓÅÊƺÎÔÚ£¿ÔÚ±¾ÎÄÖУ¬?ÎÒÃǽ«ÉîÈë̽ÌÖGraphQLµÄÉè¼ÆÔ­Ôò£¬±È½Ï GraphQL Óë REST µÄÒìͬ£¬²¢ÌÖÂÛGraphQL Ïà¶ÔÆäËû¼Ü¹¹µÄÓŵ㡣

1?ÄãµÄ API Ó¦¸ÃÓÃÄÄÏî¼¼Êõ£¿

×Ô´Ó 2015 Äê Facebook ¿ªÔ´ GraphQL ¹æ·¶ÒÔÀ´£¬Ëü¾ÍÔÚÇ°¶Ë Web ¿ª·¢ÖÐѸËÙÁ÷ÐÐÆðÀ´¡£

  1. ΪʲôÕâÖÖм¼Êõ»áͻȻÁ÷ÐÐÆðÀ´£¿
  2. Ó봫ͳ REST API Ïà±È£¬GraphQL ÌṩÁËÄÄЩÓÅÊÆ£¿

ÎÒÃǽ«ÌÖÂÛ GraphQL µÄÉè¼ÆÔ­Ôò£¬±È½Ï GraphQL Óë REST ÖеÄÏàͬÇëÇ󣬲¢ ÉîÈë̽ÌÖ GraphQL Ïà¶ÔÆäËû¼Ü¹¹µÄÓŵã?¡£

ΪÀí½â GraphQL ×÷Ϊ API ¼Ü¹¹µÄºÃ´¦£¬ÎÒÃÇÒªÌÖÂÛ API ÔÚ¿Í»§¶Ë - ·þÎñÆ÷½á¹¹ÖеÄ×÷Óá£API£¨Ó¦ÓóÌÐò±à³Ì½Ó¿Ú£©ÊÇÒ»¸öÖмä²ã£¬ËüÔÊÐí·þÎñÆ÷´Ó¿Í»§¶Ë½ÓÊսṹ»¯Êý¾ÝÇëÇ󣬲¢Õë¶ÔÇëÇóµÄÊý¾Ý·¢Ëͽṹ»¯µÄÏìÓ¦¡£Éè¼Æ API ¼Ü¹¹µÄ·½·¨ÓкܶàÖÖ¡£

ÈÃÎÒÃÇÀ´Ñо¿Ò»Ï´Ùʹ GraphQL ÊʺÏÏÖ´ú»¯ Web Ó¦ÓóÌÐòµÄÖØÒª»ù±¾Éè¼ÆÔ­Ôò¡£

2?GraphQL ·þÎñÆ÷µÄÉè¼ÆÔ­Ôò

GraphQL ¹æ·¶¸ÅÀ¨ÁË 5 ¸öÉè¼ÆÔ­Ôò£¬ÕâʹÆä³ÉΪÏÖ´úÇ°¶Ë¿ª·¢µÄÁ¼ºÃ½â¾ö·½°¸¡£?ÎÒÃÇ¿´Ò»Ï GraphQL µÄÉè¼ÆÔ­Ôò£¬²¢ÒÔ Facebook ÐÂÎÅÍÆËÍ×÷ΪÎÒÃǵÄÓÃÀý¡£

  1. ²éѯΪ·Ö²ã½á¹¹£¬Ê¹Óý«²éѯÓëÏìÓ¦Êý¾Ý1¶Ô1Æ¥ÅäµÄ·Ö²ãºÍǶÌ××ֶθñʽ¡£²éѯºÍÏìÓ¦µÄÐÎ×´ÀàËÆÓÚÊ÷£¬¿É²éѯÿ¸öÏîµÄÆäËûǶÌ××ֶΡ£ÔÚ Facebook µÄÐÂÎÅÍÆËÍÖУ¬ÕâÖֽṹÔÊÐíÒ»¸ö²éѯ·µ»ØÒ»¸öÌû×ÓÁÐ±í¡¢Ã¿¸öÌض¨Ìû×ÓµÄÆÀÂÛ£¬ÒÔ¼°Ã¿¸öÆÀÂ۵ĵãÔÞ¡£
  2. ¸Ã½á¹¹ÒÔ²úƷΪÖÐÐÄ£¬¹Øעǰ¶ËÏ£ÍûÈçºÎ½ÓÊÕÊý¾Ý£¬²¢¹¹½¨½»¸¶ËùÐèµÄÔËÐÐʱ¡£ÕâʹµÃ Facebook µÄÐÂÎÅÍÆËÍ¿Éͨ¹ýÒ»´ÎÇëÇó´Óºó¶Ë»ñÈ¡ÐèÒªµÄËùÓÐÊý¾Ý£¬Ê¹·þÎñÆ÷°´ÕÕ GraphQL µÄ¹æ·¶´Ó²»Í¬µÄ¶Ëµã»ñÈ¡Êý¾Ý¡£
  3. ËüʹÓÃÌض¨ÓÚÓ¦ÓóÌÐòµÄÀàÐÍϵͳ£¬¸Ãϵͳʹ¿ª·¢ÈËÔ±ÄÜÔÚÖ´ÐÐÇ°È·±£²éѯʹÓÃÁËÓÐЧÀàÐÍ£¬²¢ÇÒÓï·¨ÕýÈ·¡£ÀýÈ磬ÐÂÎÅÍÆË굀 GraphQL ģʽҪÇó×ֶΡ°user¡±±ØÐë°üº¬Ò»¸ö×Ö·û´®£¬¶ø¡°likes¡±±ØÐë°üº¬Ò»¸öÊý×Ö¡£Èç¹û²éѯÊÔͼÌí¼Ó²»Í¬ÀàÐ͵ÄÊäÈ룬GraphQL ½«ÔÚÖ´ÐвéѯǰÅ׳öÒ»¸ö´íÎó¡£
  4. GraphQL ²éѯÊÇÔÚ¿Í»§¶ËÖ¸¶¨µÄ£¬Òò´Ë£¬¿Í»§¶ËÈ·ÇÐÖªµÀËü½«ÒÔºÎÖÖ¸ñʽ½ÓÊÕÊý¾Ý¡£ÕâÒâζ×Å£¬Èç¹ûÇ°¶ËÇëÇóµÄ¸ñʽÊÇ°üº¬Óû§Ãû¡¢ÆÀÂۺ͵ãÔÞµÄ post Êý¾Ý£¬ÄÇôÀ´×Ô Facebook ÐÂÎÅÍÆË͵ÄÇëÇó»á¹¹½¨ÔÚÒ»¸ö¶ÔÏóÖУ¬¶ø²»ÊÇÏñÆäËû¼Ü¹¹ÄÇÑù¹¹½¨¶à¸öµ¥¶ÀµÄÊý¾Ý¿é¡£
  5. ʹÓà GraphQL µÄ·þÎñÆ÷½á¹¹±ØÐëÊÇÄÚÊ¡µÄ£¬»òÕß¿ÉÓÉ GraphQL ×Ô¼º²éѯ¡£ÓÚÊDzÅÓÐÁËÏñ GraphiQL »ò GraphQL playground ÕâÑùµÄÇ¿´ó¹¤¾ß¡£ÕâÁ½ÖÖ¹¤¾ß¶¼¿ÉÒÔÈà Facebook ¿ª·¢ÈËԱ׼ȷµØ¿´µ½ÔÚËûÃǵķþÎñÆ÷ÉÏʹÓÃÁËÄÄЩ²éѯºÍ×ֶΡ£

ΪÌÖÂÛÏò GraphQL µÄת±ä£¬ÒÔ¼°ÕâЩÉè¼ÆÔ­ÔòÈçºÎ¸ø¿ª·¢´øÀ´ºÃ´¦¡£

ÎÒÃÇÊ×ÏÈÉîÈëÁ˽⴫ͳµÄ REST API ¼Ü¹¹ºÍËüµÄ²»×ãÖ®´¦¡£

3?´«Í³µÄ RESTful ¼Ü¹¹

REST ¼Ü¹¹µÄÉè¼Æ·¶Ê½²àÖØÓÚ·ÖÅä HTTP ÇëÇó·½·¨£¨GET¡¢POST¡¢PUT¡¢PATCH¡¢DELETE£©ºÍ URL ¶ËµãÖ®¼äµÄ¹Øϵ¡£

ÔÚ REST ¼Ü¹¹ÖУ¬·½·¨ºÍ¶ËµãµÄÿ¸ö×éºÏµÃµ½²»Í¬µÄ·â×°¹¦ÄÜ¡£Èç¹û¿Í»§¶ËÐèÒªµÄÊý¾ÝÌض¨¶Ëµã / ·½·¨²»Ìṩ£¬Ôò¿ÉÄÜÐèÒª¶îÍâÇëÇó¡£´Ó REST ÇëÇ󷵻صÄÊý¾Ý¸ñʽÒÀÀµÓڶ˵㡪²»Äܱ£Ö¤ÕâЩÊý¾Ý»á°´ÕÕÇ°¶ËÐèÒªµÄ·½Ê½½øÐиñʽ»¯¡£ÎªÊ¹ÓÃÀ´×ÔÏìÓ¦µÄÊý¾Ý£¨¸ñʽÓëȱʡÇé¿öÏ´Ӷ˵㷵»ØµÄ¸ñʽ²»Í¬£©£¬±ØÐëÔÚ¿Í»§¶Ë±àдÊý¾Ý½âÎöºÍÊý¾Ý²Ù×÷¡£

½ÓÏÂÀ´£¬ÈÃÎÒÃÇ¿´¿´ GraphQL ¹æ·¶Óë REST µÄ²»Í¬Ö®´¦£¬ÒÔ¼°ËüµÄÓŵ㡣ÕâЩÓŵãʹÕâ¸öмܹ¹³ÉΪÌرðÊʺϽâ¾ö¿Í»§¶ËºÍ·þÎñÆ÷Ö®¼äÊý¾Ý½»¸¶ÎÊÌâµÄ½â¾ö·½°¸¡£

4?GraphQL ¼Ü¹¹

Óë RESTful API Ò»Ñù£¬GraphQL API Éè¼ÆÓÃÓÚ´¦Àí HTTP ÇëÇ󲢶ÔÕâЩÇëÇóÌṩÏìÓ¦¡£ÎÞÂÛÈçºÎ£¬Õâ¾ÍÊÇÏàËÆÖ®´¦¡£REST API ¹¹½¨ÔÚÇëÇó·½·¨ºÍ¶ËµãÖ®¼äµÄÁ¬½ÓÉÏ£¬¶ø GraphQL API ±»Éè¼ÆΪֻͨ¹ýÒ»¸ö¶Ëµã£¬Ê¼ÖÕʹÓà POST ÇëÇó½øÐвéѯ£¬Æä URL ͨ³£ÊÇ yourdomain.com/graphql¡£

ÇëÇóµ½´ï GraphQL ¶Ëµãºó£¬¿Í»§¶ËÇëÇóµÄÔغÉÍêÈ«ÔÚÇëÇóÌåÖд¦Àí¡£Õâ¸öÇëÇóÌå±ØÐë×ñÑ­ GraphQL ¹æ·¶£¬API ±ØÐëÓÐÊʵ±µÄ·þÎñÆ÷¶ËÂß¼­À´´¦ÀíÕâЩÇëÇó²¢ÌṩÊʵ±µÄÏìÓ¦¡£

ÕâÌṩÁË±È RESTful API ¸üÁ÷³©µÄ¿Í»§¶ËÌåÑ飬ºóÕß¿ÉÄÜÒªÇó¿Í»§¶ËÕë¶Ô¶à¸öÊý¾Ý¿é·¢³ö¶à¸öÇëÇ󣬲¢ÔÚÊý¾Ý·µ»Øºó½øÐвÙ×÷¡£

ΪÁ˲ûÃ÷ GraphQL ÊÇÈçºÎʵÏÖÕâÒ»µãµÄ£¬ÈÃÎÒÃÇ·Ö½âһϠGraphQL ·þÎñÆ÷µÄ½á¹¹¡£

5?GraphQL ·þÎñÆ÷

ÆôÓà GraphQL Âß¼­µÄ·þÎñÆ÷¶ËÂß¼­Óɶ¨ÒåÁË·þÎñÆ÷¹¦ÄÜµÄ Documents ×é³É¡£ÕâЩ Documents °üº¬¿ÉÖ´ÐÐÎļþºÍÀàÐÍϵͳ¶¨Òå¡£¹ËÃû˼Ò壬ÀàÐÍϵͳ¶¨ÒåΪÿ¸öÊý¾Ý×ֶζ¨Òå¿É½ÓÊܵÄÀàÐͺ͸ñʽÊäÈë¼°½á¹û¡£

¿ÉÖ´ÐÐÎļþ°üº¬Òª´¦ÀíµÄ¿ÉÄܵIJÙ×÷ÁÐ±í£¬ÆäÖаüÀ¨²Ù×÷ÀàÐÍ£¨²éѯ¡¢Ð޸Ļò¶©ÔÄ£©¡¢²Ù×÷Ãû³Æ¡¢Òª²éѯ»òдÈëµÄ×ֶκÍÒ»¸öÑ¡Ôñ¼¯£¬¸ÃÑ¡Ôñ¼¯×¼È·¶¨ÒåÁ˽«´Ó²Ù×÷·µ»ØµÄÊý¾Ý¡£Ñ¡Ôñ¼¯ÊÇ GraphQL µÄ×î´ó¼ÛÖµËùÔÚ¡ª¡ªËüÃÇÔÊÐí¿Í»§¶Ë²éѯÌض¨µÄÊý¾Ý¼¯²¢½ÓÊÕ°üº¬ËùÇëÇóÐÅÏ¢µÄÏìÓ¦£º²»¶à²»ÉÙ¡£

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
GET?/graphql?query={?books(id:12)?{?authors?{?firstName,?lastName?}?title,?yearPublished,?length?}???{?????Query?{?????????????????//??operation?type????books?(id:12)?{?????????//??operation?endpoint???????authors?{????????????//??requested?fields??????????firstName??????????lastName???????}????????title???????yearPublished??????????}????}??}?

ÓÐ¹Ø GraphQL ¹æ·¶µÄ½á¹¹ºÍÓï·¨µÄ¸ü¶àÐÅÏ¢£¬Çë²ÎÔÄ GraphQL µÄÎĵµ¡£(https://graphql.github.io/graphql-spec/June2018/#sec-Overview)

½ÓÏÂÀ´£¬ÎÒÃǽ«¿´Ï GraphQL ÖвéѯµÄ½á¹¹¡£

6?GraphQL ²éѯ½âÎö

ÏÂÃæÊÇÒ»¸ö½á¹¹»¯µÄ GraphQL ²éѯ£¬ÓÃÓÚ»ñÈ¡Ìض¨Êé¼®µÄÊý¾Ý£¬°üÀ¨×÷ÕßµÄÐÕºÍÃû

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
GET?/graphql?query={?books(id:12)?{?authors?{?firstName,?lastName?}?title,?yearPublished,?length?}??{??Query?{?????????????????//??operation?type??books?(id:12)?{?????????//??operation?endpoint??authors?{????????????//??requested?fields??firstName??lastName??}??title??yearPublished??}??}??}?

ÕâÒ»Çж¼¿ÉÒÔͨ¹ýÒ»¸ö²éѯÓÉ GraphQL ·þÎñÆ÷Âß¼­½âÎöºÍ´¦ÀíÍê³É¡£µ±°ÑËüÓë REST ¼Ü¹¹ÖÐÏàͬ½á¹¹µÄÇëÇó½øÐбȽÏʱ£¬GraphQL µÄÓÅÊƾͿªÊ¼ÏÔÏÖ³öÀ´ÁË¡£

ÈÃÎÒÃÇ¿´¿´ÏÂÃæµÄ REST ÇëÇó½á¹¹£¬È»ºóÖصãÌÖÂÛÆäÖеÄһЩ²îÒ죡

7?REST ÇëÇó½âÎö

ÒªÏò REST API ·¢³öÏàͬµÄÇëÇ󣬿ͻ§¶ËÊ×ÏÈÐèÒªÏòÄܹ»·µ»ØͼÊéÊý¾ÝµÄ¶Ëµã·¢ËÍÒ»¸öÇëÇ󣬲¢½«Í¼Êé id ×÷Ϊ²ÎÊý´«È룺

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
GET?/books/12?

Õâ¸öÇëÇó¿ÉÄܻ᷵»ØÒ»¸ö°üº¬Ìض¨Í¼ÊéËùÓÐÊý¾ÝµÄ¶ÔÏó£¬ÀýÈ磺

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
{??"title"?:?"The?Hitchhiker's?Guide?to?the?Galaxy",??"authorID":?42,??"yearPublished"?:?1978,??"length":?208,??"genre":?"Science?Fiction"??}?

ÔÚÎÒ?ÃǵÄÀý×ÓÀÓëÏàͬµÄ GraphQL ²éѯÏà±È£¬¸ÃÏìÓ¦ÓÐÁ½¸öȱµã£º

  1. REST ÏìÓ¦°üº¬ÀàËÆ genre ÕâÑùµÄ¶îÍâÊý¾Ý£¬·µ»ØµÄÐÅÏ¢³¬³öÁËÎÒÃǵÄÐèÇó¡£
  2. REST ÐèÒªÔÙ·¢ËÍÒ»¸öÇëÇóÀ´»ñµÃÎÒÃÇʵ¼ÊÉÏÕýÔÚ²éÕÒµÄÊý¾Ý£ºÕâ¸öÌض¨×÷ÕßµÄËùÓÐÊé¼®¡£

ΪÁË»ñµÃÕâЩÊý¾Ý£¬ÎÒÃÇÐèҪʹÓÃÎÒÃÇµÄ authorID ·¢³öÒ»¸ö¶îÍâµÄÇëÇó£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
GET?/authors/42?

Õâ¸öÇëÇóµÄÏìÓ¦Ó¦¸Ã°üº¬ÎÒÃÇÕýÔÚ²éÕÒµÄËùÓÐÊý¾Ý£º

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
{???"firstName":?"Douglas",???"lastName":?"Adams"?}?

ÏÖÔÚÎÒÃÇÒѾ­ÓÐÁËÐèÒªµÄËùÓÐÊé¼®ºÍ×÷ÕßÊý¾Ý£¬ÏìÓ¦½âÎöÓÉ¿Í»§¶ËÍê³É¡£ÏÖÔÚ£¬Ç°¶ËÓ¦ÓóÌÐò±ØÐ뽫À´×Ô²»Í¬¶ËµãµÄÊý¾Ý×éºÏÔÚÒ»Æð£¬ÓÃÓÚʵÏÖÆÚÍûµÄ¹¦ÄÜ¡£×ܵÄÀ´Ëµ£¬Óë REST API Ïà±È£¬GraphQL ÌṩµÄÐÔÄÜÓÅÊÆ¿ÉÒÔΪǰ¶Ë¿ª·¢ÈËÔ±´øÀ´»Ø±¨¡£Ê¹Óà GraphQL ¹æ·¶´´½¨·þÎñÆ÷¿ÉÄÜÐèÒª¸ü¶àµÄÉèÖÃÒÔ¼°±àдԤ²âÐԵķþÎñÆ÷¶ËÂß¼­À´½âÎöºÍ´¦ÀíÇëÇó¡£

ËäÈ» GraphQL µÄÉèÖóɱ¾¿ÉÄܱȴ«Í³µÄ REST ¼Ü¹¹Òª¸ß£¬µ«ÊÇ£¬¸üÒ×ÓÚά»¤µÄ´úÂë¡¢½¡×³µÄ¿ª·¢¹¤¾ßºÍ¾«¼òµÄ¿Í»§¶Ë²éѯËù´øÀ´µÄºÃ´¦Í¨³£»á³¬¹ý³É±¾¡£

  • ·¢±íÓÚ:
  • Ô­ÎÄÁ´½Ó£ºhttp://news.51cto.com/art/202001/609615.htm
  • ÈçÓÐÇÖȨ£¬ÇëÁªÏµ cloudcommunity@tencent.com ɾ³ý¡£

ɨÂë

Ìí¼ÓÕ¾³¤ ½ø½»Á÷Ⱥ

ÁìȡרÊô 10ÔªÎÞÃż÷ȯ

˽Ïí×îР¼¼Êõ¸É»õ

ɨÂë¼ÓÈ뿪·¢ÕßÉçȺ
Áìȯ
http://www.vxiaotou.com