XPath‚ÅRESTful‚ÈURLÝŒv‚ðl‚¦‚Ä‚Ý‚é

Posted by Hiraku on 2010-09-14

WebAPI‚Ü‚½‚ÍWebƒT[ƒrƒX‚ðì‚é‚Æ‚«‚ɁAl‚¦‚È‚¢‚Æ‚¢‚¯‚È‚¢‚Ì‚ªURLÝŒv‚Å‚·B
‹ß”N‚́uCool URLv‚Ə̂µ‚āA’Z‚¢URL‚ðÝŒv‚·‚é‚Ì‚ª—¬s‚è‚Å‚·B—á‚Æ‚µ‚ẮAtwitter‚ÌŠeƒ†[ƒU[ƒy[ƒW‚ÌURL‚́u/user?user={ƒ†[ƒU[ID}v‚È‚Ç‚Å‚Í‚È‚­Au/{ƒ†[ƒU[ID}v‚É‚È‚Á‚Ä‚¢‚Ü‚·B
—áFhttp://twitter.com/Hiraku
‹†‹É‚É’Z‚¢URL‚Å‚·‚ˁB

‚½‚¾A‚±‚±‚Ü‚Å’Z‚­‚µ‚Ä‚µ‚Ü‚¤‚ƍ¢‚邱‚Æ‚ª‚ ‚è‚Ü‚·B
twitter‚̏ꍇ‚¾‚ƁAŒŸõ—p‚ÌURLu/searchv‚âƒIƒvƒVƒ‡ƒ“Ý’è‚́u/settings/...v‚È‚Ç‚Í“Á—á‚Å‚ ‚èAƒ†[ƒU[ID‚ðŽw‚µ‚Ä‚¢‚Ü‚¹‚ñB‚±‚ê‚́Asearch‚âsettings‚Æ‚¢‚¤–¼‘O‚̃†[ƒU[‚ðì‚邱‚Æ‚ª‚Å‚«‚È‚¢‚±‚Æ‚ðˆÓ–¡‚µ‚Ü‚·BŠg’£«‚ª‹]µ‚É‚È‚Á‚Ä‚µ‚Ü‚Á‚½‚ñ‚Å‚·‚ˁBBB

twitter‚Ù‚Ç‹É’[‚ÈURLÝŒv‚É‚¹‚¸A‚í‚©‚è‚â‚·‚­AŽ©‘R‚ɐ݌v‚·‚邽‚ß‚ÌŽwj‚Á‚Ä‚È‚¢‚©‚ƁA‚¢‚­‚‚©Œó•â‚ðl‚¦‚Ä‚Ý‚Ü‚µ‚½B¡‰ñ‚ÍXPath‚ðŽæ‚è“ü‚ꂽƒpƒ^[ƒ“‚Å‚·B‚½‚Ô‚ñAl‚¦•û‚Æ‚µ‚Ă͈ê”ÔƒVƒ“ƒvƒ‹‚¾‚ÆŽv‚¤‚ñ‚Å‚·‚ªAA‚Ü‚ŸAŒ©‚Ä‚­‚¾‚³‚¢B

XML{XPath‚ÌŠT”O‚ðŽg‚Á‚ÄURL‚ðÝŒv‚·‚é

  • u/iƒ‹[ƒgjv”z‰º‚Ƀf[ƒ^‚·‚ׂĂðŠÜ‚Þ‹‘å‚ÈXML‚ª‘¶Ý‚·‚é‚ƍl‚¦‚é
  • XPath‚ÅXML‚ði‚荞‚ñ‚¾Œ‹‰Ê‚ðƒŠƒ\[ƒX‚ƍl‚¦A‚»‚ÌXPath‚ð‚»‚Ì‚Ü‚ÜURL‚É‚·‚é

•¶–Ê‚¾‚¯‚¾‚Æ‚í‚©‚è‚Â炢‚̂ŁAtwitterƒNƒ[ƒ“u‚µ‚å‚Ú‚Á‚½[(shobotter)v‚ÌWebAPI‚ðl‚¦‚Ä‚Ý‚Ü‚·B



—áFhttp://sample.com/shobotter

‚µ‚å‚Ú‚Á‚½[‚̃‹[ƒgƒm[ƒh‚ɂ́A‚µ‚å‚Ú‚Á‚½[‚ÉŠÖ‚·‚é‚·‚ׂĂ̏î•ñ‚ª‚‚܂Á‚½XML‚ª‘¶Ý‚µ‚Ü‚·B


<?xml version="1.0" encoding="UTF-8"?>
<shobotter>
 <status id="1234">
  <text>¡‹N‚«‚½‚È‚¤</text>
  <date>2010-01-01</date>
  <user>
   <name>shobo</name>
   <icon>http://sample.com/shobo.png</icon>
  </user>
 </status>
 <status id="1235">
  <text>‚¨’‹‚²‚Í‚ñ‚È‚¤</text>
  <date>2010-01-01</date>
  <user>
   <name>shakin</name>
   <icon>http://sample.com/shakin.png</icon>
  </user>
 </status>
 ...
</shobotter>

‚»‚ꂼ‚ê‚Ì“Še“à—e‚ɂ͈êˆÓ‚ÈID‚ªU‚ç‚ê‚Ä‚¢‚Ü‚·Bid=1234‚Ìstatus‚ðXPath‚ŏ‘‚­‚Æ‚±‚¤‚È‚è‚Ü‚·Bi‘¼‚É‚à‘‚«•û‚Í‚ ‚è‚Ü‚·‚ªA‚±‚±‚ł͉º‹L‚ðÌ—p‚µ‚Ü‚·j

/shobotter/status[@id=1234]

‚±‚ê‚ðAstatus 1234‚ðŽ¦‚·URL‚É‚µ‚Ü‚·B

—áFhttp://sample.com/shobotter/status[@id=1234]


<?xml version="1.0" encoding="UTF-8"?>
<collection>
 <status id="1234">
  <text>¡‹N‚«‚½‚È‚¤</text>
  <date>2010-01-01</date>
  <user>
   <name>shobo</name>
   <icon>http://sample.com/shobo.png</icon>
  </user>
 </status>
</collection>

XPath‚̉‰ŽZŒ‹‰Ê‚̓m[ƒh‚̃ŠƒXƒg‚Ȃ̂ŁAƒ‹[ƒgƒm[ƒh‚Ì–¼‘O‚Ícollection‚Æ‚µ‚Ä‚Ý‚Ü‚µ‚½B‚±‚ñ‚ÈŠ´‚¶‚ÅXPathURL‚Ì–@‘¥‚ðŒˆ‚ß‚é‚ƁA•”•ª–Ø‚Í‚·‚ׂĂтµ‚Á‚Ə‘‚­‚±‚Æ‚ª‚Å‚«‚Ü‚·B

—áFhttp://sample.com/shobotter//user

‚±‚ê‚̓†[ƒU[‚̈ꗗ‚ð•Ô‚·URL‚Å‚·B


<?xml version="1.0" encoding="UTF-8"?>
<collection>
 <user>
  <name>shobo</name>
  <icon>http://sample.com/shobo.png</icon>
 </user>
 <user>
  ...
 </user>
 ...
</collection>

‚±‚±‚Ü‚Å‚ÍURL‚ª‰½‚ðŽ¦‚·‚©A‚·‚È‚í‚¿GET‚Ì–â‚¢‡‚킹Œ‹‰Ê‚Ì‚Ý‚ðl‚¦‚Ä‚¢‚Ü‚·‚ªA“¯—l‚ɍXV‚âV‹Kì¬‚àl‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B

REST‚̍l‚¦•û‚Ɋ‚΁AƒŠƒ\[ƒX‚̐V‹Kì¬‚͏W‡ƒŠƒ\[ƒX‚ɑ΂µ‚āAPOST‚Åappend‚·‚é‚Ì‚Å‚µ‚½B‚·‚È‚í‚¿Au‚µ‚å‚Ú‚Á‚½[‚ɂ‚Ԃ₫‚ð’ljÁ‚·‚év‚́Astatus‚̈ꗗ‚ð•\‚·URL‚ÉPOST‚µ‚Ä‚â‚ê‚΂悢‚Ì‚Å‚·B

—áFPOST http://sample.com/shobotter/status


<?xml version="1.0" encoding="UTF-8"?>
<status>
 <text>”æ‚ꂽ‚È‚¤</text>
 <user>
  <name>shakin</name>
 </user>
</status>

PUT‚É‚æ‚éXV‚âADELETE‚É‚æ‚éíœ‚È‚Ç‚à“¯—l‚Å‚·BˆÈ‰ºÈ—ªB

‚Ü‚Æ‚ß‚È‚Ç

ƒf[ƒ^‚ª‹K‘¥³‚µ‚­ƒcƒŠ[\‘¢‚ð‚µ‚Ä‚¢‚éê‡‚́A‚±‚Ì•ûŽ®‚ª”ñí‚É‚í‚©‚è‚â‚·‚¢‚µì‚è‚â‚·‚¢‚ÆŽv‚¢‚Ü‚·B‚µ‚©‚µAuser‘Îstatus‚ÌŠÖŒW‚ª‘½‘Α½‚ŁA‚Ç‚¿‚ç‚ðe‚É‚·‚邱‚Æ‚à‚Å‚«‚éA‚Æ‚È‚é‚Æ‚â‚è‚Â炭‚È‚è‚Ü‚·B

¢‚Á‚½‚Æ‚«‚́AƒcƒŠ[\‘¢‚ð‘g‚Ý‘Ö‚¦‚½XML‚ð•Ê‚ÌURL‚ōl‚¦‚Ä‚ ‚°‚È‚¢‚Æ‚¢‚¯‚È‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñBB

‚à‚Á‚ÆŽ©—R“x‚ª‚‚­‚È‚é‚悤‚ɁAƒŠƒŒ[ƒVƒ‡ƒiƒ‹ƒf[ƒ^ƒx[ƒX‚̍l‚¦•û‚ð‚»‚Ì‚Ü‚ÜURLÝŒv‚ÉŠˆ‚©‚¹‚È‚¢‚©‚È‚Ÿ‚ƍl‚¦‚āA‚¿‚å‚Á‚ƍì‚Á‚Ä‚¢‚é‚à‚Ì‚ª‚ ‚è‚Ü‚·B‚Ü‚½‚Å‚«‚ ‚ª‚Á‚½‚ç•ñ‚µ‚Ü‚·B

keyword: XPath RESTful Rest

architecture‚̍ŐV‹LŽ–