API는 두 소프트웨어의 소통 : A가 이렇게 요청하면 B는 이렇게 응답한다는 약속
Rest API는 A가 어떤 방식으로 요청하고,B가 어떤 방식으로 응답할 지 지정해 놓은 다양한 형식들 중 하나.
요세 가장 많이 사용하는 방식이다. 왜 좋은 API형식인지 ??
CRUD 네 가지를 통해서
Create : 정보를 생성해서 넣는 역할
Read : 조회
Update : 정보 변경
Delete : 정보 삭제
→ 대부분의 서비스들이 API를 통해 하는 일들은 이 4가지로 구성되어있다.
RESTful한 요청으로 작성하기
POST https://api.yalcobooks.com/v1/books
새 책의 정보를 추가하기
GET https://api.yalcobooks.com/v1/books
책의 정보 조회
GET https://api.yalcobooks.com/v1/books/1
색인번호가 1인 책의 정보 조회
PUT https://api.yalcobooks.com/v1/books/20
색인번호가 20인 책의 정보 수정
PATCH https://api.yalcobooks.com/v1/books/7
색인번호가 7인 책의 대여 상태 변경
DELETE https://api.yalcobooks.com/v1/books/123
색인번호가 123책을 삭제하는 요청
각각이 CRUD 중 하나에 속해 있고, 이처럼 HTTP 프로토콜을 이용해서 URL 요청을 보낸다.
HTTP는 RESTful API의 필수요소는 아니지만, RESTful API의 조건을 구현하기 용이하기 때문에 현업에서 HTTP와 RESTful API를 같이 사용한다.

GET, DELETE : 편지봉투
POST, PUT, PATCH : 소포 상자
[
{
"id": 1,
"title": "Clean Code",
"author": "Robert C. Martin",
"published_date": "2008-08-01",
"isbn": "9780132350884",
"status": "available"
},
{
"id": 2,
"title": "The Pragmatic Programmer",
"author": "Andy Hunt and Dave Thomas",
"published_date": "1999-10-30",
"isbn": "9780201616224",
"status": "rented"
},
{
"id": 3,
"title": "Design Patterns: Elements of Reusable Object-Oriented Software",
"author": "Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides",
"published_date": "1994-10-31",
"isbn": "9780201633610",
"status": "available"
}
]https://api.yalcobooks.com/v1/books?status=available[
{
"id": 1,
"title": "Clean Code",
"author": "Robert C. Martin",
"published_date": "2008-08-01",
"isbn": "9780132350884",
"status": "available"
},
{
"id": 3,
"title": "Design Patterns: Elements of Reusable Object-Oriented Software",
"author": "Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides",
"published_date": "1994-10-31",
"isbn": "9780201633610",
"status": "available"
}
]고유 식별자를 사용하기 위해서는 데이터베이스를 구축할 때 반드시 각 항목마다의 고유값이 만들어지도록 설계해야한다.
각 요청의 응답에, 가용한 다른 요청들의 정보를 포함시키는 것
리소스에 관해서 다른 리소스(링크)를 같이 요청하여 첨부 할 수 있는 기능
이 링크 정보들을 통해서, 개발자는 API 문서들을 다 뒤져보지 않아도 다음에 어떤 요청을 보낼 수 있는지 살펴볼 수 있다.
이 부분의 API의 세부사항이 변경되더라도, 클라이언트에서 이 정보를 참조하게 만들면 클라이언트의 코드를 고칠 필요도 없어진다.
각 리소스는 그것의 상위 또는 하위 리소스를 가질 수 있다.
https://api.yalcobooks.com/v1/books/reviews → 색인번호가 1인 책에 해당하는 리뷰들을 조회하려면 위와 같이 URI를 작성하고, 이를 통해 각 요청이 응답으로 받고자 하는 정보들 뿐 아니라, 리소스들이 서로 어떤 관계를 갖는지 이 URI를 통해 쉽게 파악할 수 있다.{
"bookId": 1,
"reviews": [
{
"reviewId": 101,
"userId": "user123",
"rating": 5,
"comment": "This book is a must-read for software engineers!",
"date": "2023-01-15"
},
{
"reviewId": 102,
"userId": "user456",
"rating": 4,
"comment": "Very insightful, though some examples are outdated.",
"date": "2023-01-20"
}
]
}
https://api.yalcobooks.com/v1/books로 작성했을 때 새 책의 등록은 해당 요청이 어느 리소스에 데이터를 추가하는 것인지 명시하면된다.https://api.yalcobooks.com/v1/books/1 1이 식별자{
"message" : "Book updated successfully."
}{
"status" : "rented"
}https://api.yalcobooks.com/v1/books/1{
"message" : "Book deleted successfully."
}