β¨ REST API κ°μ
REST API λ Representational State Transfer API μ μ½μμ΄λ€. REST μ API λ λ°λ‘ ꡬλΆν΄μ μκ°νλ©΄ μ’μλ°, REST λ νλμ μν€ν μ³ (λ°©λ²λ‘ ) μ κ°κΉλ€. κ·Έλ κΈ° λλ¬Έμ λͺ κ°μ§ μ£Όμ μμΉλ€μ΄ μ‘΄μ¬νλ©°, μ΄λ₯Ό μ μ§ν¨ API λ₯Ό "RESTful" νλ€κ³ νννλ€. API λ Application Programming Interface μ μ½μλ‘, μλ²κ° ν΄λΌμ΄μΈνΈμκ² μ 곡νλ 리μμ€ νμ© λ°©λ²μ΄ λ΄κΈ΄ μΈν°νμ΄μ€μ΄λ€.
π API
API λ₯Ό μ²μ λ€μΌλ©΄ μλ², DB μ κ°λ κ³Ό ν·κ°λ¦΄ μ μλ€. νμ§λ§ API λ μλ²λ DB λ μλλ€. μλ²μ DB κ° μ 곡νλ λ°μ΄ν° λλ κΈ°λ₯μ μ κ·Όν μ μλλ‘ ν΄μ£Όλ μλ΄νμ κ°κΉλ€. κ°λ Ή, vodkamitlime.com μ μλ²μμ sayHello() λΌλ ν¨μλ₯Ό μ€λΉν΄λμλ€κ³ νμ. μλ²λ μΈλΆμμ μ΄ ν¨μλ₯Ό νΈμΆνλ©΄ μΈμ λ μ§ "hello world!" λ₯Ό μΆλ ₯νμ¬ λ°νν μ€λΉκ° λμ΄ μλ€. νμ§λ§ API κ° μλ€λ©΄ κ·Έ λꡬλ μ΄ ν¨μλ₯Ό νΈμΆνλ λ°©λ²μ λͺ¨λ₯Ό κ²μ΄λ€. vodkamitlime.com/test μ μ μν΄μΌνλμ§, vodkamitlime.com?order=true λ‘ μ μν΄μΌ νλμ§ λ±μ μ λ³΄κ° μλ€λ©΄ μλ²μμ μνλ 리μμ€λ₯Ό μ»μ΄μ¬ μ μλ€.
μ΄μ²λΌ μΈλΆμμ μλ²μ μμμ μ μ ν λΆλ¬μ¬ μ μλλ‘ νμ© λ°©λ²μ ꡬμ±ν κ²μ΄ API λ€.
μΉ APIκ° μ μ°¨ νμ°λλ©° μ΄λ₯Ό νμ€ννκΈ° μν νλ‘ν μ½μΈ SOAP(Simple Object Access Protocol)μ΄ κ°λ°λμλ€. SOAP APIλ XMLμ μ¬μ©νλ©° HTTP, SMTP, TCP λ±μ μμ²μ μ£Όκ³ λ°μμΌλ©°, κ°νΈν λ°©λ²μΌλ‘ μ ν리μΌμ΄μ μ λ€μν νκ²½μμ μ€νν μ μμλ€.
POST http://www.stgregorioschurchdc.org/cgi/websvccal.cgi HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "http://www.stgregorioschurchdc.org/Calendar#easter_date"
Content-Length: 479
Host: www.stgregorioschurchdc.org
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
<?xml version="1.0"?>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cal="http://www.stgregorioschurchdc.org/Calendar">
<soapenv:Header/>
<soapenv:Body>
<cal:easter_date soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<year xsi:type="xsd:short">2014</year>
</cal:easter_date>
</soapenv:Body>
</soapenv:Envelope>
μμ μμλ SOAP API λ‘ λ³΄λΈ μμ²μ μμλ€. 보μ΄λ€μνΌ XML λ‘ μμ²μ μ£Όκ³ λ°μ κ²½μ° payload μ μμ΄ κ΅μ₯ν ν¬κΈ° λλ¬Έμ λ€νΈμν¬ λμνμ λ§μ΄ μ°¨μ§νλ λ¬Έμ κ° μ겨, μΈν°λ· ν΅μ μ΄ κΈ°νκΈμμ μΌλ‘ λμ΄λ 21μΈκΈ° ν΅μ μλ μ΄μΈλ¦¬μ§ μμλ€. μ΄λ¬ν λ¬Έμ μ μ ν΄κ²°νλ©΄μ λμμ μΈν°λ· ν΅μ μ νΈλ¦¬νκ² νκ³ μ νλ κ²μ΄ λ°λ‘ 2000λ μ λ±μ₯ν REST μν€ν μ³ API μΈ κ²μ΄λ€.
β¨ κ΅¬μ± μμ
REST API λ μμ, νμ, ννμΌλ‘ ꡬμ±λλ©°, μ체 νν ꡬ쑰 (Self-descriptiveness) λ‘ κ΅¬μ±λμ΄ API λ§μΌλ‘λ HTTP μ μμ²μ μ§κ΄μ μΌλ‘ μ΄ν΄ν μ μλ€.
π μμ(Resource) : URI
μμμ μλ²μ μ μ₯λμ΄ μμΌλ©°, ν΄λΉ μμμ μ κ·Όν μ μλ URI κ° μ‘΄μ¬νλ€. ν΄λΌμ΄μΈνΈλ URI λ₯Ό ν΅ν΄ ν΄λΉ μμμ μ‘°μνκ³ , CRUD μμ μ μνν μ μλ€.
π νμ(Verb) : HTTP Method
μμμ λν νμμ΄λ€. POST, GET, PUT, DELETE μ κ°μ HTTP μμ² λ©μλλ₯Ό μλ―Ένλ€.
π νν(Representation of Resource)
νμμ ꡬ체μ μΈ λ΄μ©μ΄λ€.
β¨ μ£Όμ μμΉ
μ΄λ ν APIκ° RESTful νκΈ° μν΄μλ λ€μ λ κ°μ§ μ μ λ₯Ό μΆ©μ‘±ν΄μΌ νλ€.
1) URI λ 리μμ€λ₯Ό ννν΄μΌ νλ€.
2) 리μμ€μ λν νμλ HTTP μμ² λ©μλλ‘ νννλ€.
μ΄ λ κ°μ§λ₯Ό νλμ© κ΅¬μ²΄μ μΌλ‘ μ΄ν΄λ³΄μ.
π 1) URI λ 리μμ€λ₯Ό ννν΄μΌ νλ€.
"리μμ€λ₯Ό ννν΄μΌ νλ€"λ λ§μ μλ―Έλ "νμλ₯Ό ν΅ν΄ μ‘°μλλ μμμ μμ§νλ λ¨μ΄λ₯Ό νκΈ°ν΄μΌ νλ€" μ κ°κΉλ€. μ¬μ€ μ΄ μμΉμ λΆμ λ¬ΈμΌλ‘ νννλ κ²μ΄ λ μ ν©ν λ― μΆκΈ°λ νλ€. λ¬λ¦¬ λ§νλ©΄, "URI λ νμλ₯Ό νννλ©΄ μλλ€" μ κ°κΉλ€. μ¬λμ΄λΌλ©΄ λ³΄ν΅ action μμ£Όλ‘ μκ°νκΈ° λ§λ ¨μ΄λ€. λλ¬Έμ "μ΄ uri μ μ μνλ©΄ κ²μλ¬Ό μμ κ° λ κ²μ΄λ€" λ μκ°μ΄ URI μ λ ΈμΆλλ κ²½μ°κ° μκΈ΄λ€.
ex ) vodkamitlime.com/delete/boardPost/1
νμ§λ§ μ΄λ REST μμλ κΆμ₯νμ§ μλ λ°©λ²μ΄λ€. URI μ νμκ° μ§μ μ μΌλ‘ λ ΈμΆλκ³ , μ΄λ€ μμμ΄ μ λ¬λλμ§ μ§κ΄μ μΌλ‘ νμ νκΈ° νλ€κΈ° λλ¬Έμ΄λ€.
π 2) 리μμ€μ λν νμλ HTTP μμ² λ©μλλ‘ νννλ€.
λλ²μ§Έ μμΉμ HTTP λ©μλμ μ§κ²°λ λ΄μ©μ΄λ€. μ£Όμν HTTP μμ² λ©μλλ ν¬κ² 5κ°μ§κ° μμΌλ©°, κ°κ°μ μν μ λ€μκ³Ό κ°λ€.
GET: 리μμ€ μ·¨λ
POST: 리μμ€ μμ±
PUT: 리μμ€ μ 체 κ΅μ²΄
PATCH: 리μμ€ μΌλΆ μμ
DELETE: 리μμ€ μμ
HTTP λ©μλλ 리μμ€ (μμ) μ λν΄ μνν μ μλ νμμ μ’ λ₯μ΄λ€. λ°λΌμ μμλ URI μ μ§μ λ ΈμΆλμ΄μλ μλλ€. μμ κ²μλ¬Όμ μμ νλ URI λ‘λ λ€μ μΌμ΄μ€κ° λ μ μ νλ€. νμλ₯Ό μ§μ λ ΈμΆνμ§λ μκ³ μλ²κ° μ²λ¦¬νλ 리μμ€ (μμ) μ μ νν λͺ μνκΈ° λλ¬Έμ΄λ€.
DELETE vodkamitlime.com/boardPost/1
π κΈ°ν μμΉ
REST API λ₯Ό ꡬμ±νλ μμν λͺ κ°μ§ μΆκ° μμΉμ΄ μμΌλ©°, μ΄λ λ€μκ³Ό κ°λ€.
- μμ²κ³Ό μλ΅ payload λ JSON μΌλ‘ μ£Όκ³ λ°λλ€.
- / λ‘ κ΅¬λΆλ path λ₯Ό ν΅ν΄ κ³μΈ΅κ΄κ³λ₯Ό λνλΈλ€.
- μλ΅μ λ³΄λΌ λ μ μ ν HTTP μν μ½λλ₯Ό 보λΈλ€.
- Spinal-case λ₯Ό κΆμ₯νλ€.
- HTTP ν€λμ μμ²κ³Ό μλ΅μ λν μ£Όμ μ 보λ₯Ό λ΄λλ€. (General/Request/Response Headers)
- resource λ μλ¬Έμ, λ¨μ λͺ μ¬ μ¬μ©μ μ§ν₯νλ€.
- νμΌνμ₯μλ ν¬ν¨νμ§ μλλ€.
β¨ μ°Έκ³ μλ£
- API(μ ν리μΌμ΄μ νλ‘κ·Έλλ° μΈν°νμ΄μ€)λ - κ°λ , κΈ°λ₯, μ₯μ
- λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive (μν€λΆμ€)
- What is a REST API?
- [Network] RESTλ? REST APIλ? RESTfulμ΄λ?
'π» DEV > Computer Science' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
How is code allocated in memory? (1) | 2023.06.05 |
---|---|
[CS] OOP (κ°μ²΄μ§ν₯) & Functional (ν¨μν) νλ‘κ·Έλλ° κΈ°μ΄ (0) | 2021.09.15 |
[CS] νλ‘μΈμ€(Process)μ μ€λ λ(Thread) (0) | 2021.05.27 |
[CS] μ»΄νμΌλ¬(Compiler)μ μΈν°ν리ν°(Interpreter) (0) | 2021.05.27 |
[CS] λΌμ΄λΈλ¬λ¦¬ & νλ μμν¬ (0) | 2021.05.13 |
λκΈ