분명히 REST는 HTTP 사용 방법에 대한 일련의 규칙 일뿐 입니다. 이 협약이 어떤 이점을 제공하는지 궁금합니다. 아는 사람 있나요?
답변
REST 가 무엇인지 실제로 아무도 아무도 동의하지 않기 때문에 이것에 대한 좋은 대답을 얻지 못할 것이라고 생각합니다 . 위키 피 디아 페이지는 전문 용어 무거운 및 설명에 빛입니다. 토론 페이지는 사람들이 이것에 얼마나 동의하지 않는지 살펴볼 가치가 있습니다. 그러나 내가 알 수있는 한 REST는 다음을 의미합니다.
대신 무작위로 이름 세터와 게터 URL을 갖고 사용하는 GET
모든 게터과 POST
세터 모두를 위해, 우리는 URL이 자원을 식별하도록 시도하고 HTTP 작업을 사용 GET
, POST
, PUT
그리고 DELETE
그들에게 물건을 할 수 있습니다. 그래서 대신
GET /get_article?id=1
POST /delete_article id=1
당신은 할 것
GET /articles/1/
DELETE /articles/1/
그리고 그 POST
와 PUT
대응 “을 만들”와 “갱신”작업 (하지만 아무도 어떤 방법 내내 동의하지 않음)에.
캐싱 인수는 일반적으로 캐시 되므로 일반적으로 캐시 문자열 을 사용할 필요 가 없기 때문에 캐싱 인수가 잘못되었다고 생각 합니다. 예를 들어 django는 이와 같은 것을 매우 쉽게 만들고 REST라고 말하지 않습니다.
GET /get_article/1/
POST /delete_article/ id=1
또는 URL에 동사를 포함 시키십시오.
GET /read/article/1/
POST /delete/article/1/
POST /update/article/1/
POST /create/article/
이 경우 GET
부작용이없는 POST
것을 의미하며 서버의 데이터를 변경하는 것을 의미합니다. 난 당신이 전체 피할 수 특히,이 아마 조금 명확하고 쉽게 생각 PUT
일등석 POST
일을. 또한 원하는 경우 동사를 더 추가 할 수 있으므로 HTTP가 제공하는 기능에 인위적으로 구속되지 않습니다. 예를 들면 다음과 같습니다.
POST /hide/article/1/
POST /show/article/1/
(또는 어쨌든 예제가 발생할 때까지 생각하기가 어렵습니다!)
결론적으로 볼 수있는 장점은 두 가지뿐입니다.
- 웹 API가 더 깨끗하고 이해하기 쉬울 수 있습니다.
- 웹 사이트와 데이터를 동기화 할 때는 말만
synchronize("/articles/1/")
하거나 무엇이든 할 수 있기 때문에 REST를 사용하는 것이 더 쉽습니다 . 이것은 코드에 크게 의존합니다.
그러나 나는 꽤 큰 단점이 있다고 생각합니다.
- 모든 조치가 CRUD에 쉽게 맵핑되는 것은 아닙니다 (작성, 읽기 / 검색, 업데이트, 삭제). 객체 유형 리소스를 다루지 않을 수도 있습니다.
- 모호한 혜택을위한 추가 노력입니다.
- 어떤 방법으로 라운드로 혼란
PUT
하고POST
있습니다. 영어로 그들은 비슷한 것을 의미합니다 ( “나는 벽에 통지를 게시 / 게시 할 것입니다.”).
결론적으로 말하면 : 추가 노력을 기울이고 싶지 않거나 서비스가 CRUD 작업에 실제로 매핑되지 않으면 API의 두 번째 버전에 대해 REST를 저장하십시오.
방금 REST와 관련하여 또 다른 문제가 발생했습니다. 한 요청에서 둘 이상의 작업을 수행하거나 복합 객체의 일부를 가져 오려는 것을 지정하는 것은 쉽지 않습니다. 이는 왕복 시간이 중요하고 연결을 신뢰할 수없는 모바일에서 특히 중요합니다. 예를 들어, 페이스 북 타임 라인에 게시물을 받고 있다고 가정합니다. “순수한”REST 방식은 다음과 같습니다.
GET /timeline_posts // Returns a list of post IDs.
GET /timeline_posts/1/ // Returns a list of message IDs in the post.
GET /timeline_posts/2/
GET /timeline_posts/3/
GET /message/10/
GET /message/11/
....
어리석은 일입니다. Facebook의 API는 매우 훌륭한 IMO이므로 그들이하는 일을 봅시다 :
기본적으로 쿼리 할 때 대부분의 개체 속성이 반환됩니다. “fields”쿼리 매개 변수를 사용하여 리턴 할 필드 (또는 연결)를 선택할 수 있습니다. 예를 들어이 URL은 Ben의 ID, 이름 및 사진 만 반환합니다.
https://graph.facebook.com/bgolub?fields=id,name,picture
REST로 어떻게 그런 일을하는지 전혀 알지 못하며 여전히 REST로 계산되는지 여부를 알 수 있습니다. 나는 당신이 그렇게하지 말아야한다고 말하려고하는 누군가를 확실히 무시할 것입니다 (특히 이유가 “휴식이 아니기 때문에”)!
답변
간단히 말해, REST는 HTTP를 원래대로 사용하는 것을 의미합니다.
REST에 대한 Roy Fielding의 논문을 살펴보십시오 . 나는 웹 개발을하는 모든 사람이 그것을 읽어야한다고 생각합니다.
참고로 Roy Fielding은 HTTP 프로토콜의 핵심 드라이버 중 하나입니다.
advandages의 이름을 지정하려면 :
- 단순한.
- HTTP 캐시와 프록시 서버를 잘 활용하여 높은로드를 처리 할 수 있습니다.
- 매우 복잡한 응용 프로그램도 간단한 리소스로 구성 할 수 있습니다.
- 새로운 클라이언트가 응용 프로그램을 위해 특별히 설계하지 않은 경우에도 응용 프로그램을 쉽게 사용할 수 있습니다 (아마도 응용 프로그램을 만들 때 주변에 없었기 때문에).
답변
간단히 말해서 : NONE .
공감할 수는 있지만, 비 REST HTTP에 비해 실질적인 이점은 없다고 생각합니다. 모든 현재 답변이 유효하지 않습니다. 현재 가장 많이 투표 된 답변의 인수 :
- 단순한.
- HTTP 캐시와 프록시 서버를 잘 활용하여 높은로드를 처리 할 수 있습니다.
- 매우 복잡한 응용 프로그램도 간단한 리소스로 구성 할 수 있습니다.
- 새로운 클라이언트가 응용 프로그램을 위해 특별히 설계하지 않은 경우에도 응용 프로그램을 쉽게 사용할 수 있습니다 (아마도 응용 프로그램을 만들 때 주변에 없었기 때문에).
1. 단순
REST를 사용하면 서버 측 및 클라이언트 측 스크립트에 대한 추가 통신 계층이 필요합니다. => 실제로 비 REST HTTP를 사용하는 것보다 더 복잡합니다.
2. 캐싱
캐싱은 서버가 보낸 HTTP 헤더로 제어 할 수 있습니다. REST는 비 REST에서 누락 된 기능을 추가하지 않습니다.
3. 조직
REST는 사물 정리에 도움 이 되지 않습니다 . 그것은 강제로 사용중인 서버 측 라이브러리가 지원하는 API를 사용합니다. 비 REST 접근 방식을 사용할 때 응용 프로그램을 같은 방식으로 구성 할 수 있습니다. 예를 들어 Model-View-Controller 또는 MVC 라우팅을 참조하십시오 .
4. 사용하기 쉬운 / 구현
전혀 사실이 아닙니다. 이 모든 것은 응용 프로그램을 얼마나 잘 구성하고 문서화하는지에 달려 있습니다. REST는 마술처럼 애플리케이션을 향상시키지 않습니다.
답변
REST가 가능하게하는 가장 큰 장점은 클라이언트 / 서버 커플 링을 줄이는 것입니다. 기존 클라이언트를 중단하지 않고 시간이 지남에 따라 REST 인터페이스를 발전시키는 것이 훨씬 쉽습니다.
답변
발견 가능성
각 리소스에는 계층 또는 링크의 다른 리소스에 대한 참조가 있으므로 쉽게 찾을 수 있습니다. 이는 사람이 클라이언트를 개발하여 문서를 지속적으로 컨설팅하지 않아도되고 제안을 제공하는 데 유리합니다. 또한 클라이언트 소프트웨어가 URL을 하드 코딩하지 않는 한 서버가 자원 이름을 일방적으로 변경할 수 있음을 의미합니다.
다른 도구와의 호환성
API의 어느 부분으로나 갈 수 있거나 웹 브라우저를 사용하여 리소스를 탐색 할 수 있습니다. 디버깅 및 테스트 통합이 훨씬 쉬워집니다.
표준화 된 동사 이름
올바른 단어를 찾지 않고도 작업을 지정할 수 있습니다. OOP의 getter 및 setter가 표준화되지 않은, 어떤 사람들이 사용 된 경우 상상 retrieve
하고 define
대신. 각 개별 액세스 포인트에 대해 올바른 동사를 기억해야합니다. 사용 가능한 소수의 동사가 그 문제에 불과하다는 것을 아는 것.
표준화 된 상태
GET
존재하지 않는 리소스 인 경우 404
RESTful API에 오류가 발생할 수 있습니다 . 그것을 REST가 아닌 API와 대조하십시오 {error: "Not found"}
. 다른 쪽 개발자에게 메시지를 작성하기 위해 추가 공간이 필요한 경우 언제든지 응답 본문을 사용할 수 있습니다.
예
동일한 기능을 가진 두 개의 API를 상상해보십시오. 하나는 REST를 따르고 다른 하나는 그렇지 않습니다. 이제 해당 API에 대해 다음 클라이언트를 상상하십시오.
평안한:
GET /products/1052/reviews
POST /products/1052/reviews "5 stars"
DELETE /products/1052/reviews/10
GET /products/1052/reviews/10
HTTP :
GET /reviews?product_id=1052
POST /post_review?product_id=1052 "5 stars"
POST /remove_review?product_id=1052&review_id=10
GET /reviews?product_id=1052&review=10
이제 다음 질문들을 생각해보십시오.
-
각 고객의 첫 번째 전화가 효과가 있었다면 나머지는 어떻게 작동 할 수 있습니까?
-
액세스 포인트가 변경되었거나 변경되지 않은 API에 대한 주요 업데이트가있었습니다. 얼마나 많은 문서를 다시 읽어야합니까?
-
마지막 쿼리의 반환을 예측할 수 있습니까?
-
게시 된 검토를 삭제하기 전에 편집해야합니다. 문서를 확인하지 않고도 할 수 있습니까?
답변
Ryan Tomayko의 아내에게 REST를 설명하는 방법을 살펴 보는 것이 좋습니다.
타사 편집
waybackmaschine 링크에서 발췌 :
예는 어떻습니까. 당신은 교사이고 학생들을 관리하기를 원합니다 :
- 그들이 어떤 수업에 있는지
- 그들이 받고있는 성적,
- 비상 연락처
- 가르치는 책에 대한 정보 등
시스템이 웹 기반 인 경우 여기에 관련된 각 명사에 대한 URL이있을 수 있습니다 student, teacher, class, book, room, etc
. … 각 URL에 대해 기계가 읽을 수있는 표현이 있다면, 모든 정보가 표준 방식으로 소비 될 수 있기 때문에 새로운 도구를 시스템에 걸치는 것은 사소한 일입니다. … 당신은 시험 점수를 수집하기 위해 각 개별 학교 시스템과 대화 할 수있는 전국 시스템을 구축 할 수 있습니다.
각 시스템은 간단한 HTTP GET을 사용하여 서로 정보를 얻습니다. 한 시스템이 다른 시스템에 무언가를 추가해야하는 경우 HTTP POST를 사용합니다. 시스템이 다른 시스템에서 무언가를 업데이트하려면 HTTP PUT을 사용합니다. 알아 내야 할 유일한 것은 데이터의 모습입니다.
답변
나는이 질문에 대한 답을 찾고있는 모든 사람들 이이 “슬라이드 쇼”를 진행할 것을 제안 합니다.
REST가 무엇인지, 왜 그렇게 멋진 지, 장단점, SOAP과의 차이점을 이해할 수 없었습니다. 그러나이 슬라이드 쇼는 매우 훌륭하고 이해하기 쉽기 때문에 지금보다 훨씬 더 명확합니다.