REST 란 무엇입니까? 약간 혼동 됨


155

REST가 웹 서비스라고 가정했지만이 생각에 틀린 것 같습니다. 그래서 REST는 무엇입니까?

Wikipedia를 읽었지만 여전히 머리를 감쌀 수는 없습니다. 많은 장소에서 API를 REST API라고하는 이유는 무엇입니까?


21
@ John Saunders : 어떻게 이것이 가능한 복제물입니까? 다른 사람은 REST가 무엇인지 알고 있지만 반면에 Nathan은 혼란스러워합니다.
가짜 코드 원숭이 Rashid

나는 다른 사람이 그의 질문에 대답 할 것이라고 느꼈다. 아무도 동의하지 않으면 마감 투표가 만료됩니다. 이 질문에 대한 답변은 약 10 가지입니다. "rest"태그를 클릭하면 모든 태그가 표시됩니다.
John Saunders

1
REST는 웹 서비스 구축을위한 일련의 규칙입니다. 해당 규칙에 따라 API를 빌드하면 REST API입니다. 내 고무 오리에게 REST를 설명하는 방법 은 이러한 규칙 중 일부를 비공식적으로 설명합니다.
42

답변:


127

REST는 특정 웹 서비스가 아니라 상태 정보 관리를위한 설계 개념 (아키텍처)입니다. 이에 관한 논문은 Roy Thomas Fielding의 논문 (2000), "건축 스타일과 네트워크 기반 소프트웨어 아키텍처의 디자인"( Irvine의 캘리포니아 대학에서 온라인 으로 이용 가능 )이었습니다.

먼저 Ryan Tomayko의 게시물을 읽었습니다. 어떻게 아내에게 REST를 설명 했는지 ; 좋은 출발점입니다. 그런 다음 Fielding의 실제 논문을 읽으십시오. 그렇게 발전된 것도 아니고 길지도 않습니다 (6 장, 180 페이지)! (나는 당신이 짧은 학교처럼 아이들을 알고 있습니다).

편집 : REST를 설명하는 것이 무의미하다고 생각합니다. 확장 성, 가시성 (상태 비 저장) 등과 같은 개념이 너무 많아 독자가 파악해야하며,이를 이해하기위한 가장 좋은 출처는 실제 논문입니다. POST / GET 등이 아닙니다.


@Nathan, 날 믿어, 나는 당신이 전에했던 것과 같은 문제가 있었다. 논문을 읽고 아마도 몇 번 천천히 진행하십시오. 그러나 개념을 파악할 것입니다. 실제로 어렵지는 않습니다. 사람들은 그것을 잘못 설명하는 경향이 있습니다.
Anders

개발자가 REST를 사용하려고 할 때 (REST를 염두에두고 전체 시스템을 계획하지 않고) 코드에서만 수행하려고하면 지옥이 온다 :-)
karatedog

@Anders, REST를 고려하면 REST와 웹 서비스를 어떻게 비교할 수 있습니까?
죄수


1
어쩌면이 장 대신 전체 논문을 읽는 충분합니다 ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm은
andilabs

74

REST는 일반적으로 웹 애플리케이션에 사용되는 소프트웨어 디자인 패턴입니다. 평신도의 관점에서 이것은 많은 다른 프로젝트에서 일반적으로 사용되는 아이디어라는 것을 의미합니다. 대표 상태 이전을 나타냅니다 . REST의 기본 개념은 서버 측 (데이터베이스 테이블의 행에서와 같이)의 오브젝트를 작성하거나 파괴 할 수있는 자원으로 처리하는 것입니다.

REST에 대한 가장 기본적인 생각은 웹 애플리케이션의 URL을 형식화하는 방법입니다. 예를 들어, 리소스의 이름이 "게시물"인 경우 :

/posts 사용자가 표시하기 위해 모든 게시물에 액세스하는 방법입니다.

/posts/:id 사용자가 고유 한 ID를 기반으로 검색하여 개별 게시물에 액세스하고 보는 방법입니다.

/posts/new 새 게시물을 작성하기위한 양식을 표시하는 방법입니다.

POST 요청을 보내는 것은 /users실제로 데이터베이스 수준에서 새 게시물을 만드는 방법 입니다.

PUT 요청을 보내는 것은 /users/:id주어진 게시물의 속성을 업데이트하고 고유 한 ID로 다시 식별하는 방법입니다.

DELETE 요청을 보내는 것은 /users/:id주어진 게시물을 삭제하는 방법이며 다시 고유 한 ID로 식별됩니다.

내가 이해하는 것처럼 REST 패턴은 Ruby on Rails 프레임 워크에 의해 주로 대중화되어 (웹 앱용) RESTful 경로에 큰 중점을 둡니다. 그래도 나는 틀릴 수 있습니다.

나는 그것에 대해 이야기 할 자격이 없을 수도 있지만 이것이 내가 그것을 배운 방법입니다 (특히 Rails 개발을 위해).

누군가 "REST api"를 언급 할 때 일반적으로 의미하는 것은 데이터 검색을 위해 RESTful URL을 사용하는 API입니다.


2
Rails는 REST 원칙을 기반으로하기 때문에 운이 좋으며 Rails 도구를 사용하면 코드가 RESTful이됩니다. 그러나 REST에 대해 잭을 이해하지 못하는 코더가 있으며 원하는 것을 코딩하고 결국이 'URL 형식'을 사용하기 때문에 최신 유행이기 때문입니다.
karatedog

8
이 답변에서 / users가 사용 된 곳은 / posts가 아니어야합니까?
Mayuresh Srivastava

@MayureshSrivastava PUT 예제에는 : id가 있고 POST 예제에는 : id가 없습니다. 나머지 이야기를위한 구글. (POST : 비 안전한 비 멱등; PUT : 비 안전 멱등)
Ajeet 간가

38

REST이다 건축 양식디자인 네트워크 기반 소프트웨어 아키텍처는.

REST개념을 자원이라고합니다. 자원의 표현은 상태 비 저장이어야합니다. 일부 매체 유형을 통해 표시됩니다. 미디어 유형의 몇 가지 예는 XML, JSON하고 RDF. 리소스는 구성 요소에 의해 조작됩니다. 구성 요소는 표준 유니폼 인터페이스를 통해 리소스를 요청하고 조작합니다. HTTP의 경우,이 인터페이스는 예를 들어, 표준 HTTP 작전으로 구성 GET, PUT, POST, DELETE.

RESTHTTPHTTP의 단순성과 RESTful 원칙에 대한 매우 자연스러운 매핑으로 인해 일반적으로 over 사용됩니다 . 그러나 REST는 특정 프로토콜과 관련이 없습니다.

기본 REST 원칙

클라이언트-서버 통신

클라이언트-서버 아키텍쳐는 매우 분리 된 관심사를 가지고 있습니다. RESTful 스타일로 빌드 된 모든 애플리케이션도 원칙적으로 클라이언트 서버 여야합니다.

무국적

서버에 대한 각 클라이언트 요청은 해당 상태가 완전히 표시되어야합니다. 서버는 서버 컨텍스트 또는 서버 세션 상태를 사용하지 않고 클라이언트 요청을 완전히 이해할 수 있어야합니다. 모든 상태는 클라이언트에 유지되어야합니다. 상태 비 저장 표현에 대해서는 나중에 자세히 설명하겠습니다.

캐시 가능

캐시 제약이 사용될 수 있으며, 따라서 응답 데이터가 캐시 가능 또는 캐시 불가능으로 표시 될 수있게한다. 캐시 가능으로 표시된 모든 데이터는 동일한 후속 요청에 대한 응답으로 재사용 될 수 있습니다.

균일 한 인터페이스

모든 구성 요소는 단일 통일 인터페이스를 통해 상호 작용해야합니다. 이 구성 요소를 통해 모든 구성 요소 상호 작용이 발생하므로 다른 서비스와의 상호 작용은 매우 간단합니다. 인터페이스는 동일합니다! 이것은 또한 구현 변경이 개별적으로 이루어질 수 있음을 의미합니다. 균일 한 인터페이스가 항상 변경되지 않기 때문에 이러한 변경 사항은 기본 구성 요소 상호 작용에 영향을 미치지 않습니다. 한 가지 단점은 인터페이스에 붙어 있다는 것입니다. 인터페이스를 변경하여 특정 서비스에 최적화를 제공 할 수 있다면 REST가이를 금지하므로 운이 나쁘다. 그러나 밝은면에서 REST는 웹에 최적화되어 있으므로 HTTP를 통한 REST의 놀라운 인기가 있습니다!

위의 개념은 REST의 특성을 정의하고 REST 아키텍처를 웹 서비스와 같은 다른 아키텍처와 차별화합니다. REST 서비스는 웹 서비스이지만 웹 서비스는 반드시 REST 서비스 일 필요는 없습니다.

REST 및 위의 원칙 에 대한 자세한 내용은 REST Design Principals 에서이 블로그 게시물 을 참조하십시오 .


15

Representational State Transfer를 나타내며 많은 것을 의미 할 수 있지만 일반적으로 API 및 응용 프로그램에 대해 이야기 할 때는 웹 서비스를 수행하거나 웹을 통해 프로그램을 대화하는 방법으로 REST에 대해 이야기하고 있습니다.

REST는 기본적으로 시스템 간 통신 방법이며 SOAP RPC가 의도 한 많은 기능을 수행하지만 SOAP는 일반적으로 연결을 만들고 인증 한 다음 연결을 통해 작업을 수행하지만 REST는 웹이 작동하는 방식과 거의 같은 방식으로 작동합니다 . URL이 있고 해당 URL을 요청하면 무언가를 얻습니다. 사람들이 웹을 가장 큰 REST 응용 프로그램으로 설명하기 때문에 혼동되기 시작하는 곳이며 기술적으로는 정확하지만 실제로는 무엇인지 설명하는 데 도움이되지 않습니다.

간단히 말해서 REST를 사용하면 웹 브라우저에서 사용하는 것과 유사한 도구를 사용하여 인터넷을 통해 두 개의 애플리케이션을 대화 할 수 있습니다. 이것은 SOAP보다 훨씬 간단하며 REST의 많은 기능은 "이렇게 복잡 할 필요는 없다"는 것이다.

읽을만한 가치 :


REST는 제약 조건을 기반으로하는 아키텍처이고 SOAP은 프로토콜이며 완전히 다른 것입니다. 사람들이 SOAP과 REST에 대해 같은 개념으로 이야기하는 것을 좋아하지 않습니다. 사람들이 그것에 대해 혼동하는 것은 놀라운 일이 아닙니다.
Anders

@Anders-그는 REST API를보고 있다고 말했으며 웹 서비스를 사용하는 방법이라고 생각했습니다. REST를 이와 같이 사용할 수 있으며이 용량에서 SOAP이 수행하는 많은 작업을 수행합니다. 웹을 세계 최대의 RESTful 애플리케이션으로 이야기하는 것도 가능하지만 REST API를 사용하는 대상을 실제로 설명하지는 않습니다.
Mark

이것은 실제로 내 주요 문제였습니다. 동일한 개념으로 REST와 SOAP을 봅니다. API는 디자인 상 RESTful 인 것 같습니다.
죄수

4

http://en.wikipedia.org/wiki/Representational_State_Transfer

기본 아이디어는 서버에 지속적으로 연결하는 대신 요청을하고, 데이터를 가져오고, 사용자에게 보여 주지만, 전부는 아니고, 사용자가 더 많은 데이터를 요구하는 것을 할 때, 또는 일부를 서버로 전달하기 위해 클라이언트는 새로운 상태로 변경을 시작합니다.


3
어쩌면 그것은 나뿐이지만 적절한 인용과 함께 stackoverflow에 대한 관련 답변을 보는 것이 좋습니다. 유머러스하고 위키 백과가 of을했다고 가정 해 봅시다. 그렇다면 귀하의 링크는 어떤 이점이 있습니까? :)
가짜 코드 원숭이 Rashid

1
@Hack Saw : 당신의 대답에 포함되어서는 안됩니까?
가짜 코드 원숭이 Rashid

방금 편집 기능을 발견했습니다. :)
Hack은

1
@karatedog : REST는 HTTP로 달성 할 수 있지만 다양한 데이터 전송 방법으로 수행 할 수 있습니다.
Hack Saw

1
이것은 당신이 쓰고있는 HTTP 프로토콜이고, REST는 아키텍처입니다.
karatedog
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.