REST를 수행하는 올바른 방법은 무엇입니까?


36

일부는 실제로 모든 것을 이해하지 못하더라도 오늘날 모든 사람들은 SOA를 수행합니다. 그래서 그들은 잘못하고 있습니다. 그것을 유추로 사용하여 REST 가 무엇인지 (또는 적어도 내가 생각하는 것) 알고 있으며 그중 일부를하고 싶습니다. 그러나 나는 그것을 올바르게하고 싶다.

내 질문은 REST를 수행하는 올바른 방법은 무엇입니까?


1
스택 오버플로 '휴식'태그 위키 는 스택 교환 네트워크의 맥락에서 정식 리소스에 도달하는 것만 큼 가깝습니다.
gnat

17
나는 단지 잠시 동안 눈을 감았 다. .. 아마 자전거를 타러 갔다가 내려 놓을 수도있다.
Edward Strange

REST는 기본적으로 mydomain.com/accounts와 같은 URL과 HTTP 동사를 사용하여 작업을 호출하지 않습니까? 동사는 데이터를 가져 오거나 작성, 업데이트 또는 삭제할지 여부를 나타냅니다. 내가 생각할 때 REST라고 생각합니다.
머핀 맨

2
@Nick, 그것은 가장 일반적인 해석이며, '실제'는 이해하기가 훨씬 어렵고 (내가 말할 수있는 한) 실제로 구현 된 곳을 찾기가 훨씬 더 어렵습니다 ... (윌크의 답변 참조)
Benjol

3
@Nick 이해는 REST가 아니며 RPC over HTTP 입니다.

답변:


30

RESTful 웹 애플리케이션을 빌드하는 방법을 배울 수있는 방법은 많지만 고유 한 올바른 방법은 없습니다. RESTful은 표준은 아니지만 표준 세트 (HTTP, URI, Mime Type 등)를 사용합니다.

이것으로 시작하십시오 : 아내에게 REST를 설명하는 방법

다음으로 진행하십시오 : RESTful 웹 서비스 요리 책

그리고 배우는 가장 좋은 방법은 실험을하는 것이므로 실수로 많은 것을 배울 수 있기 때문에 웹 애플리케이션을 개발하기 위해 모든 노력을 기울이십시오.)

첫 번째 웹 앱이 완전히 RESTful하지 않더라도 걱정하지 마십시오.이를 수행하는 방법을 찾을 수 있습니다!

그래서 오비완 케노비 (Obi-Wan Kenobi)는 "강제력은 당신과 함께 할 수 있습니다!" ;)

편집하다

더 구체적으로 설명하겠습니다. RESTful webapp을 만들고 싶습니까? 글쎄, 내가 할 수있는 많은 방법이 있지만 이것이 주요 지침입니다.

정의

REST (Representational State Transfer) 는 WWW와 같은 분산 시스템을위한 소프트웨어 아키텍처 스타일입니다. 표준은 아니지만 HTTP, AJAX, HTML, URI, Mime Type 등의 표준 세트를 사용합니다. 우리는 자원 자체가 아니라 자원의 표현에 대해 이야기하고 있습니다. '내 아내에게 REST를 설명하는 방법'에서 발췌 :

부인 : 웹 페이지는 자원입니까?

라이언 : 종류. 웹 페이지는 리소스를 나타냅니다. 리소스는 개념 일뿐입니다.

건축의 제약

  • Client-Server : 클라이언트와 서버는 Uniform Interface로 구분됩니다 (아래 설명 참조).
  • Stateless : 서버에 특정 클라이언트 상태를 저장하지 않고 서버-클라이언트 통신이 수행됩니다.
  • Cachable : 클라이언트는 이미 만들어진 요청에 대한 캐시를 가지고있을 수 있습니다.
  • 계층 시스템 : 클라이언트는 엔드 서버와 직접 연결되어 있는지 또는 중간 단계를 통해 통신이 수행되는지 알 수 없습니다.

균일 한 인터페이스

  • 자원 식별 : 각 자원은 URI로 식별해야합니다.
  • 프로토콜 : 통신 클라이언트와 서버에 들어가기 위해서는 프로토콜을 먼저 수행해야합니다. 각 요청에는 올바른 MIME 유형 (application / xml, text / html, application / rdf + xml 등), 올바른 헤더 및 올바른 HTTP 메소드가있을 수 있습니다 (아래 CRUD 설명 참조).

CRUD

좋아, 우리는 URI를 사용할 수있는 리소스를 식별하는 것을 보았지만, 동작 (추가, 수정, 삭제 등)에는 CRUD (만들기, 읽기, 업데이트 및 삭제)에 대한 환영이 필요하다.

  • 만들기 { HTTP : POST } { SQL : INSERT } => 새로운 자원을 생성
  • { HTTP : GET } { SQL : SELECT } => 읽기 리소스 읽기
  • 업데이트 { HTTP : PUT } { SQL : UPDATE } => 리소스를 수정
  • 삭제 { : DELETE HTTP {} SQL : DELETE가 } => 자원을 삭제

PUT 및 DELETE와 관련하여 일부 기술 문제가 나타날 수 있습니다 (HTML 형식으로 표시됨). 종종 개발자는 각 'PUT'및 'DELETE'요청에 대해 POST를 사용하여이 문제를 무시합니다. 공식적으로 PUT과 DELETE를 사용해야합니다. 그건 그렇고, 당신이 원하는 것을하십시오. 내 경험에 따르면 매번 POST와 GET을 사용하게됩니다.

--- 다음 부분을 사용해야하지만 REST의 유대가 아닙니다 : 연결된 데이터와 관련이 있습니다 ---

URI

기술적 세부 사항에서 추상 URI! 다음과 같이 URI를 작별하십시오.

http://www.example.com/index.php?query=search&id=9823&date=08272012

URI를 다시 디자인하십시오! 위의 링크를 가져 와서 다음과 같이 변경하십시오.

http://www.example.com/search/2012/08/27/9823

훨씬 나아요? 다음과 같이 수행 할 수 있습니다.

다른 것 : 다른 URI를 사용하여 다른 리소스를 나타냅니다.

주의 : about.html 및 about.rdf는 파일이 아닙니다! XSLT 변환의 결과 일 수 있습니다!

콘텐츠 협상

이 시점에 도달했다면 축하합니다! 아마도 우리가 시맨틱 웹 기술 세부 사항을 입력하기 때문에 더 추상적 인 개념을 얻을 준비가 된 것입니다.

GET http://www.example.com/about
Accept: application/rdf+xml

그러나 서버는 다른 URI ( http://www.example.com/about.rdf )를 가지고 있기 때문에 about.rdf로 응답하지 않습니다 . 자, 303 패턴을 보자! 서버는 이것을 반환합니다 :

303 See Other
Location: http://www.example.com/about.rdf

클라이언트는 다음과 같이 반환 된 링크를 따릅니다.

GET http://www.example.com/about.rdf
Accept: application/rdf+xml

마지막으로 서버는 요청 된 리소스를 반환합니다.

200 OK
about.rdf

걱정하지 마십시오. 클라이언트 응용 프로그램은이 작업을 수행하지 않습니다! 303 패턴은 서버 응용 프로그램에서 수행해야하며 브라우저는 나머지를 수행합니다.)

결론

종종 이론은 실제와는 거리가 멀다. 예, 이제 RESTful 애플리케이션을 디자인하고 개발하는 방법을 알고 있지만 위의 지침은 힌트 일뿐입니다. 웹 응용 프로그램을 구축하는 가장 좋은 방법을 찾을 수 있으며 이론적으로 원하는 것과 다를 수도 있습니다. 젠장 하지마 : D!

서지

RESTful 웹 서비스, Sameer Tyagi

REST API는 하이퍼 텍스트 중심이어야합니다. Roy Thomas Fielding

RESTful 웹 서비스 : 기본 사항, Alex Rodriguez

웨버 REST 워크 플로우


1
내가 본 가장 완벽한 가이드 인 이 링크를 추가하는 것을 고려할 수 있습니다 .
Benjol

나는 PUT과 POST가 그 의미가 바뀌고 (답과 관련하여) POST-> create, PUT-> update와 함께 사용되는 것을 보았습니다. 어떤 의미가 더 널리 사용되는지 알고 있습니까?
Andres F.

@Andres F .: jcalcote.wordpress.com/2008/10/16/… 말한다 : Create = PUT iff 지정된 리소스 (URL)의 전체 내용을 보내는 경우. 서버 측 알고리즘을 사용하여 지정된 자원의 하위를 작성하도록 명령을 서버로 보내는 경우 Create = POST. 업데이트 = PUT 지정된 리소스의 전체 내용을 업데이트하는 경우입니다. 서버가 지정된 리소스의 하나 이상의 하위 항목을 업데이트하도록 요청하는 경우 업데이트 = POST입니다.
Wilk

@Benjol : 나는 당신의 제안으로 편집 할 것입니다;) 감사합니다!
Wilk

1
@Wilk 고려해야 할 많은 것들! 아마 아무도이 권리를 얻지 못하는 이유 : P
Andres F.

5

REST 성경 책 또는 무언가 ....

성서가 필요 없습니다. 나는 똑같은 정확한 질문을 가지고 다음 세 가지 기사를 읽고 REST에 대해 필요하거나 알고 싶은 모든 것을 배웠습니다.

  1. Net Tuts +의 HTTP 및 REST에 대한 초보자 소개
  2. RESTful 웹 서비스 : IBM developerWorks 의 기본 사항
  3. InfoQ 에서 실제로 RESTful HTTP

그러나 나는 그것을 올바르게하고 싶다.

위 기사에서 읽을 수있는 핵심은 애플리케이션의 액세스 가능한 부분을 기존 HTTP "동사"(GET, PUT, POST)를 사용하여 작성, 검색, 업데이트 또는 삭제할 수있는 "자원"으로 생각하는 것입니다. 삭제합니다.

또한 PUT과 POST의 차이점 과 사용시기를 알고 있어야 합니다. GET, PUT 및 DELETE는 dem 등원 트랜잭션이어야하며 POST는해서는 안됩니다.

또한 클라이언트와 다시 통신 할 때 HTTP 상태 코드를 올바르게 사용 하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.