REST 대 RESTful 대 "정상"웹 서비스 – 동일하거나 그렇지 않습니까?


21

REST 및 / 또는 RESTful 애플리케이션에 대한 몇 가지 정의와 토론을 읽었지만 여전히 실제 의미를 이해하지 못합니다.

나는 보통 GET을 통해 데이터를 가져 오거나 POST를 통해 일부 웹 서비스 (일반적으로 PHP 스크립트)에 데이터를 보내어 데이터베이스에서 데이터를 얻거나 데이터베이스에 쓰는 앱을 사용합니다.

자, 이것이 RESTful 앱입니까? 그렇지 않은 경우 RESTful 앱은 무엇입니까? RESTful 개념과 지금까지 작업 한 개념의 차이점은 무엇입니까? 예를 통해 설명하십시오.

또한 누군가가 REST에 대해 이야기하고 누군가가 RESTful 앱에 대해 이야기하고 있습니다. REST 용어는 이론적 개념을 나타내는 반면 RESTful은 특정 앱에 대해 이야기 할 때 사용됩니다. 이것이 맞습니까? 아니면 REST와 RESTful 앱간에 실제 차이점이 있습니까?


1
GET 또는 POST 매개 변수에서만 정보를 가져 오기 위해 모든 서블릿을 빌드 할 수있는 경우 (통화 전에 로컬에 저장된 것은 전혀 없음) REST를 올바르게 적용한 것입니다. 다시 말해, 서버는 MVC에서 모델이 제어하지 않고 단순히 일부 작업을 수행하기 위해 제공된 것을 사용한다는 점에서 모델의 역할을 수행합니다. 그것이 조금 더 잘 설명되기를 바랍니다.
Neil

@Neil 나는 반대편에 있습니다-모바일 앱. 웹 서비스를 사용하고 POST 및 GET을 통해 통신하는 클라이언트입니다. 모든 웹 서비스는 다른 사람에 의해 만들어졌으며 내가 사용했던 모든 것입니다. 그러나 용어는 나를 혼란스럽게했다. 따라서 HTTP 채널과 HttpGet / HttpPost 객체를 사용하는 경우 RESTful 앱을 처리하고 있습니까?
deviDave

반드시 그런 것은 아닙니다. 서버가 일부 제약 조건을 위반할 수 있으므로 서버의 수행 방식을 모르는 경우 RESTful 앱인지 알 수있는 방법이 없습니다. 즉, 일관된 결과를 반환하면 아마도 RESTful 일 것입니다.
Neil

@ 닐 아, 이제 알겠다. RESTful은 서버에서 수행됩니다. 그리고 개별 매개 변수가 아닌 요청으로 게시물 객체를 보내면 아마도 REST 접근법 일 것입니다. 클라이언트 (모바일 앱)의 경우 REST인지 코딩이 같은지 신경 쓰지 않습니다. 내가 알았어?
deviDave

2
RESTful은 서버와 클라이언트 모두이지만 클라이언트 만 볼 수있는 경우 클라이언트가 제한 조건을 따르는 지 여부 만 알 수 있습니다. 그게 전부 야 REST가 의미하는 바는 로그인해야 할 경우 사용자 이름과 비밀번호를 게시한다는 것입니다. 서버는 로그인의 유효성을 검사하고 사용자 해시 키를 데이터베이스에 저장하고 반환합니다. 이제 로그인이 필요한 작업을 수행해야 할 때마다 항상 사용자 해시 키를 전달합니다. 서버는 사용자가 로그인 한 것을 "잊어 버렸지 만"사용자 해시를 사용하여 로그인 상태를 확인합니다. RESTful하지 않은 경우 서버는 로그인 한 것을 기억합니다. 차이점을 이해 하시겠습니까?
Neil

답변:


13

RESTful 애플리케이션의 주요 속성은 다음과 같습니다. 모든 통신은 http GET, POST, PUT, DELETE 를 통해 이루어 지며 모든 항목은 형식의 표준 URL ( http://your.site.com/salesapp/salesperson/0000001/details예 : 매개 변수가없는 순수 URL)을 통해 처리됩니다. URL은 GET을 식별합니다. , POST, PUT, DELETE는 원하는 것을 식별합니다.

이를 수행하는 주된 이유는로드 밸런싱, 페일 오버 등의 상태 비 저장 서비스를 자동으로 유지하기 때문입니다.

체계의 단순성으로 인해 매우 깨끗한 인터페이스가 만들어져 클라이언트를 특정 백엔드 구현에서 완전히 분리 할 수 ​​있습니다.


오, 지금까지 PUT 또는 DELETE (모바일 앱은 일반적으로 GET 및 POST 만 사용)를 사용하지 않았지만 실제로는 내가 한 일과 현재하고있는 것처럼 보입니다. 단지 클라이언트가 REST * 용어를 사용하지 않고 오히려 "웹 서비스"와 "php 스크립트"를 사용
했을뿐입니다.

2
James, 쿼리 매개 변수를 피해야하는 이유를 설명해 주시겠습니까? 예를 들어, 잘못된 계층 구조를 도입하지 않고 특정 방식으로 리소스를 필터링하고 싶다는 것을 어떻게 표현합니까?
Gary Rowe

3
@GaryRowe : URL (매개 변수 없음)은 조작하려는 리소스를 식별합니다. 여전히 매개 변수를 가질 수 있지만 자원을 식별하는 데 사용되지는 않습니다. 예를 들어 디렉토리 (/로 끝나는 URL)의 GET은 디렉토리의 자원 목록을 반환해야합니다. URL의 매개 변수를 사용하여 필터 또는 정렬 순서 등을 지정할 수 있습니다.
Martin York

1
고마워, 로키 James는 오해의 소지가있는 상황에서 쿼리 매개 변수를 사용할 수없는 것으로 보이므로 답변을 편집하려고 할 수 있습니다. 실제로 디렉토리의 리소스 목록 자체가 그 개념을 표현하는 리소스라는 흥미로운 관찰이 있습니다.
게리 로우

REST는 앱이 URL 기반 일 필요가 없으며 GET, POST, DELETE 등과 같은 동사가 필요하지 않습니다. 그러나 WebApp의 경우 URL이 유일한 옵션이며 위에서 언급 한 동사입니다.
Nawaz

6

REST는 Representational State Transfer를 나타냅니다. 소프트웨어가 REST 제약 조건 을 따르는 경우 RESTful 인 것으로 간주됩니다.

자, 이제 Wikipedia에서 뻔뻔스럽게 찢어졌습니다. 이것이 실제로 무엇을 의미합니까? 이는 GET, POST, PUT, DELETE와 같은 내장 HTTP 명령을 사용하고 클라이언트와 서버간에 통신하는 드문 명령을 사용하는 것을 의미합니다.

당신이하고있는 일은 RESTFul 앱처럼 들립니다. 그러나 정크 RESTFul 웹 서비스와 잘 디자인 된 파일 사이 에는 차이가 있습니다. 예를 들어 GET의 다른 쪽 끝에있는 PHP 코드는 상태 변경을 실행할 수 있으며, GET이 읽기 전용 작업으로 간주되므로 잘못된 것으로 간주됩니다. POST (신규)와 PUT (교체) 사용 방법 사이에는 미묘한 차이가 있습니다.

이것에 관한 Wikipedia 기사는 실제로 정말 좋으므로 여기서 멈출 것입니다.


지금까지 GET (HttpGet)을 사용하여 컨텐츠를 가져오고 POST (HttpPost)를 사용하여 데이터베이스의 컨텐츠를 입력 / 변경했습니다. 웹 서버의 HttpPost 및 PHP 스크립트 에이 매개 변수를이 매개 변수를 SQL 코드로 변환하여 보냈습니다. RESTful 앱입니까? PHP 스크립트가 얼마나 잘 수행되었는지가 아니라 개념에 관심이 있습니다. 나는 그것을하지 않았다.
deviDave

2
항상 POST를 사용하는 것보다 더 관용적 인 REST 콘텐츠 를 교체 하는 경우 PUT 사용을 조사합니다 .
Martijn Verburg

예, 그런 경우 PUT을 사용합니다.
deviDave

GET이 올바르게 구현되어야 함을 지적한 경우 +1 (즉, dem 등원). 초기에 그러한 근본적인 오류.
Gary Rowe

@deviDave 또한 리소스의 일부를 업데이트하도록 설계된 PATCH를 살펴볼 수도 있습니다. Martin이 올바르게 지적한 것처럼 PUT은 전체 리소스를 교체하는 것입니다.
Gary Rowe

4

더 나아 가기 전에이 관련 질문이 도움이 될 수 있습니다.

REST와 RESTful의 차이점은 단순히 의미론입니다. REST는 클라이언트-서버 관계에 적용되는 아키텍처 스타일입니다. RESTful은 단순히 클라이언트에게 REST를 사용한다고 알리는 방법입니다.

많은 웹 응용 프로그램은 RESTful이라고 주장하지만 실제로 Martijn Verburg도 그의 답변에서 참조한 것처럼 REST 제약 조건부분적으로 만 준수 합니다 . 나는 여기에 그것들을 나열 할 것이지만 나는 당신이 기사를 읽을 것을 강력히 권합니다.

  • 클라이언트 서버
  • 캐시 가능
  • 계층화 된 시스템
  • 주문형 코드 (선택 사항)

클라이언트 측에서 작업한다고 언급 했으므로 REST 아키텍처가 연결 클라이언트로 제공하고 기대하는 것을 확인하는 것이 도움이 될 수 있습니다. REST는 HTTP가 아니지만 REST가 무엇인지를 지원하는 가장 인기있는 프로토콜이므로 예제를 프레임으로 구성합니다.

당신의 클라이언트는 :

  • HTTP 동사 (예 : GET, POST, PUT, DELETE, OPTIONS, PATCH)를 사용하여 관련 작업을 수행하십시오.
  • 헤더 수락 및 컨텐츠 유형 헤더 이해 (예 : 이전에 본 적이없는 XML을 수신하지만 참조 된 XSD를 사용하여 사용자에게 제공 할 클라이언트 측 도메인 모델을 작성할 수 있음)
  • 이해하는 콘텐츠 유형의 제공된 링크를 따르십시오 (예 : 사용자 또는 애플리케이션이 <link rel="pay" href="http://example.org/orders(1)/payment">HTML에서 신용 카드 번호와 같은 지불 세부 사항을 나타내는 일부 XML이 포함 된 본문이있는 POST를 통해 지불 자원을 작성하는 상태 전이를 나타내는 것으로 추론하도록 하십시오) , 금액 등)
  • 광범위한 HTTP 상태 코드에 올바르게 반응

위의 작업을 수행하면 REST 클라이언트로 생각할 수 있습니다. "RESTful 앱"이라고 부르고 싶지만 클라이언트 측에서 REST를 사용하고 있으므로 피하는 것이 가장 좋습니다. 용어.


3

RESTful은 인터페이스가 읽기 및 업데이트 (및 삭제 가능) 할 수있는 객체 세트임을 의미합니다. 즉, 다중 매개 변수 쿼리가 없으며 (매개 변수는 읽으려는 객체입니다) 서버의 모든 것을 변경하는 새로운 유형의 업로드 작업은 한 가지 유형입니다.

이러한 제한은 모든 요청이 dem 등원이되도록합니다 (여러 번 전송해도 한 번 전송하는 데 아무런 영향을 미치지 않습니다). 네트워크가 언제든지 실패하고 요청이나 응답을 전달하지 않을 수 있기 때문에 dem 등원 (imdempotent) 요청으로 다시 보내면되며 복잡한 복구 작업을 수행 할 필요가 없습니다.


첫 번째 단락에 대한 찬성 간결합니다. 감사!
deviDave

한 가지 더, 내가 옳은지 알기 위해. 내가 (내 응용 프로그램) REST 서비스의 클라이언트 인 경우 서비스가 RESTful인지 또는 코딩이 항상 같은지 (httpget, httppost 등) 클라이언트가 아닌 경우? 이 원칙은 서버 스크립트 / 앱 소유자에게만 해당됩니까?
deviDave

REST는 인터페이스의 의미를 디자인하기위한 지침입니다. 기본 기술은 인터페이스가 RESTful인지 여부에 관계없이 HTTP이지만 (XML-RPC 또는 SOAP와 같은 다른 계층은 RESTful 인터페이스와 관련이 없음) 항상 동일한 httpget, httppost 등을 사용하지만 네트워크 장애는 다르게 처리합니다.
Jan Hudec

추가로, SMTP는 RESTful 인터페이스이지만 GET, PUT 등의 다른 동사와 다른 기본 프로토콜을 사용하지만 개념은 동일합니다. dem 등원 동사 기반 명령을 서버에 보냅니다.
gbjbaanb

모든 REST 요청이 dem 등성이있는 것은 아닙니다. 예를 들어 POST를 여러 번 발행하면 많은 새로운 자원이 생성됩니다.
게리 로우
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.