2010-04-09 4 views
25

나는 REST를 읽었으며, 그것을 사용하는 것이 어떤 이점이 있는지 알아 내려고하고있다. 특히, 쿼리 문자열을 사용하여보다 일반적인 GET 요청을 통해 구현할 가치가있는 REST 스타일 URL의 이점은 무엇입니까?RESTful URL을 사용하면 무엇을 사나요?

왜이 URL이된다

http://www.parts-depot.com/parts/getPart?id=00345 

이 열등 고려? (here에서 촬영) 위의 예 두 번째 URL이 실제로 더보고 우아하고 간결에서

http://www.parts-depot.com/parts/00345 

. 하지만 비용이 발생합니다 ... 첫 번째 URL은 매우 쉽게 웹 언어로 구현할 수 있습니다. 두 번째 방법은 값을 파싱하는 데 필요한 추가 코드 및/또는 서버 구성은 물론, 하위 문서 작성자에게 시스템을 설명하고 동료에게 정당화하는 데 필요한 추가 문서 및 시간을 필요로합니다.

멋지게 보이는 URL을 가지고있는 즐거움을 제외하고 구현 비용에 비견 할만한 가치가있는 RESTful URL이 얻을 수있는 이점은 무엇입니까?

+0

궁금한 점 : 후자의 URL을 구현하려면 추가 코드 및/또는 구성이 필요한 언어는 무엇입니까? – Ken

+0

자바 서블릿을 특별히 생각하고있었습니다. 두 번째 URL의 일반 바닐라 구현에서는 request.getURL()을 호출하고 URL 경로를 토큰으로 분할 한 다음 토큰을 사용하여 작업을 수행합니다. 이것은 많은 작업이 아니지만 request.getParameter ("parameterName")를 호출 할 때처럼 깨끗하지는 않습니다. 다른 방법으로는 request.getParameter()를 유지하고 웹 서버 계층에서 두 번째 URL을 다시 작성하여 처음으로 mod-rewrite 구성을 사용하는 것처럼 보이게 할 수 있습니다. 기존 서비스를 새로운 URL 스타일로 묶어줍니다. –

답변

12

희망 같은 XML은 당신이 만드는 경우 URL은 다음 올바르게 HTTP 동사를 구현하는 더 나은 기회가 명사를 참조한다는 것입니다. 그 외에도 한 URL과 다른 URL의 이점은 전혀 없습니다.

실제로 URL의 내용은 RESTful 시스템과 전혀 관련이 없습니다. 이것은 단순히 식별자입니다.

그것이 어떻게 생겼는지가 아니라, 중요한 일을하는 것입니다.

4

내가 항상 잘 아는 웹 사용자로서 좋아하지만 그러한 URL 스키마를 사용하는 경우 지침 원칙으로 사용해서는 안되는 것은 이러한 유형의 URL이 "해킹 가능"하다는 것입니다. 특히 "다음 페이지"버튼의 위치를 ​​찾는 대신 URL 내의 날짜 또는 페이지 번호를 편집 할 수있는 블로그와 같은 경우에 특히 유용합니다. REST 보는

+1

모든 URL이 해킹 가능합니다. 어떤 종류의 보안 메커니즘으로 URL을 추측하지 못하는 사람들에게 의존하고 있다면 잘못된 방식으로 URL 스키마를 사용하는 것이 가장 어려운 문제입니다. – meagar

+1

Daniel은 부 풀린 말도 안되는 UI를 탐색하는 대신에 URL을 수정하여 물건을 찾을 수 있다고 생각했습니다. 그것은 분명히 내가 * RESTful URL을 선호하는 한 가지 이유입니다. – notJim

+1

@notJim 그건 정확히 내가 의미했던 것입니다. 페이징 컨트롤이 빨라지면'http : // foo.com/article-name/page/1'을'http://foo.com/article-name/ '으로 바꿀 수 있다면별로 중요하지 않습니다. 'http : //foo.com/display_article.php? item = 412551' –

6

한 가지 방법 :

(지금은 슬프게도, 아래로 옮겨졌으며,하지만 여전히 web.archive.org에서 볼 수있다) 출시와 HTTP-이 프로토콜, 어쨌든

http://tomayko.com/writings/rest-to-my-wife 및 그의 친구가 만든 -은 모두 에 대한 동사를 명사에 적용합니다. 예를 들어 웹 페이지로 이동하면 브라우저 은 을 입력하고 다시 웹 페이지로 연결되는 URL에 HTTP GET을 수행합니다.

은 ...

대신, 대다수는 에없는 거의 으로 유용하거나 설득력있는 다른 방법이 물건을 복잡한 사양의 바쁜 쓰기 층이다. 명사는 유니버설 및 동사가 아니며 다형성이 아닙니다. 우리는 수십 개의 실제 필드 사용을 던지고 기술을 입증하고 과 같은 것으로 시작하여 과거에 실패한 다른 시스템과 비슷하게 보입니다. 우리는 HTTP를 사용하고 있습니다. 왜냐하면 오직 이 우리 네트워크에 도움이되고 보안 사람들이 덜 필요하기 때문입니다. 우리는 번쩍 번쩍하는 도구와 마법사를 위해 단순성을 거래하고 있습니다.

5

나에게 뛰어 오는 한 가지 (좋은 질문입니다)는 그들이 설명하는 것입니다. 첫 번째는 작업 (getPart)을 설명하고 두 번째 작업은 자원을 설명합니다 (파트 00345).

또한 다른 HTTP 동사를 처음에는 사용할 수 없을 수도 있습니다. 예를 들어 putPart에 대한 새로운 방법이 필요합니다.두 번째는 리소스를 조작하기 위해 다른 동사 (PUT, DELETE, POST)와 함께 재사용 할 수 있습니까? 동사와 함께 한 번, 다시 한 번 방법으로, 두 번째가 HTTP 프로토콜의 의도와 더 일치하도록 두 번 GET을한다고 말하는 것 같아요?

+3

이 답변에 포함 된 것은 REST가 단순한 멋진 URL을 제공하는 것 이상이라는 것입니다. HTTP 프로토콜을 사용하도록 설계된 방식, 즉 명사/리소스/URL에 논리 동사/방법을 적용하는 방법입니다. –

0

정말

"두 번째는, 추가 코드 및/또는 서버 구성 값에서 을 구문 분석이 필요합니다"? 그런 다음 가난한 프레임 워크를 선택합니다. 내 경험에 따르면 RESTful 버전은 정확히 같은 양의 코드이다. 어쩌면 나는 멋진 프레임 워크를 보았을 것입니다.

"뿐만 아니라 추가 문서 와 시간이 주니어 프로그래머 시스템 을 설명 보냈다"한 번만

. 그들이 그것을 얻은 후에, 당신은 그것을 다시 설명하지 않아야합니다.

"그리고 그것을 동료들에게 정당화한다."

한 번만. 그들이 그것을 얻은 후에, 당신은 그것을 다시 설명하지 않아야합니다.

+0

이것들은 좋은 코멘트이고 나는 당신에게 동의한다. 그러나 나는 그 질문에 정말로 대답하지 않았다고 생각합니다. "멋지게 보이는 URL을 가지고있는 즐거움을 제외하고, 구현 비용의 가치가있는 RESTful URL이 얻을 수있는 이점은 무엇입니까?" –

+0

@Diego Das : "질문"은 합리적이지 않았습니다. 시행 비용은 없습니다. 근본 전제는 근거없는 불만 인 것처럼 보이는 세 가지였습니다. –

+0

모든 비용이 있습니다. 우리가 사용하는 여러 프레임 워크 각각에서이 기능을 구현하는 방법에 대한 문서를 찾아보십시오. 10 명의 개발자에게 내가 배운 방법을 가르쳐야 만한다면, 그 회의는 30 분 동안 지속될 것입니다. 회의적인 동료들이 진실 된 새로운 방법 대신 무언가를 해보라고 설득해야한다면, 그것은 나에게 정치적 자본이 든다. 모든 것을 끝내기 전에, 나는 왜이 변화가 가치있는 것인지 알기를 원합니다. –

2

REST IMO의 가장 큰 장점은 REST 서비스에서 가장 중요한 HTTP 동사를 사용할 수 있다는 점입니다. 사실, REST를 사용한다는 것은 HTTP 프로토콜과 그 동사를 사용하고 있다는 것을 의미합니다.

다음과 같이해야한다 대신

첫 번째 경우를 얻는, URL을 사용하여, 당신은 "일부"를 게시 할 상상 : 당신은 당신이 게시물을 사용한해야 GET을 사용하는

http://www.parts-depot.com/parts/postPart?param1=lalala&param2=lelele&param3=lilili 

지내는 컨텍스트 동안,

http://www.parts-depot.com/parts 

반드시 a 차 몸에, (예를 들어)이

<part> 
    <param1>lalala<param1> 
    <param2>lelele<param1> 
    <param3>lilili<param1> 
</part> 
+0

RESTful URL 스타일이 손상된 부분을 수정하고 있다는 것을 아직 확신 할 수는 없지만 이것이 가장 좋은 설명이라고 생각합니다. GET 요청에서 쿼리 스팅을 사용하든 관계없이 또는 URL에 해당 데이터를 저장하더라도 관계없이 동일한 URL에서 GET 및 POST를 사용할 수 있습니다. 왜 그 솔루션은 RESTful URL에 찬성하여 반대 되는가? URL을 "정리"하여 자신 만의 고유성을 갖는 것이 좋을까요? 아니면 일반 이전 HTTP 요청 패러다임에서 작동하지 않는 REST URL로 할 수있는 일이 있습니까? –

+0

내가 대답 (어쩌면 내가 충분히 명확하지 않은)에 말했듯이 REST는 HTTP 동사를 사용하도록 설계되었으므로 ... GET/POST로 무엇이든 할 수 있습니다. 그러나, PUT 동사없이 멱등동 인 자원을 어떻게 업데이트해야합니까? POST와 GET을 사용하여이 작업을 수행 할 수 있지만 HTTP 프로토콜에 동사 (VERB)가 있으면이 작업을 사용하지 않는 이유는 무엇입니까? 더 깨끗하고 이해하기 쉽고 어쨌든 프로토콜을 사용하기 때문에 프로토콜 자체가 기대할 수있는대로 사용해야합니다. :) –

+0

REST URL과 같은 것이 없습니다. – SerialSeb

1

URI의 의미는 RFC 2396으로 정의됩니다. 특히이 문제와 관련된 추출물은 3.3이다. "경로 성분"

경로 성분은 그 방식과 권한의 범위 내에 자원 식별 데이터 (어떤 권한 성분이없는 경우 또는 방식) 권한 특정을 포함한다.

그리고 3.4 "쿼리 구성 요소"

쿼리 구성 요소는 정보의 문자열 자원에 의해 해석되어야한다.

쿼리 구성 요소는 리소스 식별자의 일부가 아니며 단지 리소스로 해석되는 정보에 불과하다는 점에 유의하십시오.

이와 같이, 첫 번째 예에서 식별되는 리소스는 실제로는 단지 /parts/getPart입니다. URL이 하나의 특정 파트 리소스를 식별해야한다는 의도라면 첫 번째 예제에서는이를 수행하지 않지만 두 번째 예제에서는 수행하지 않습니다 (/parts/00345).

URL의 두 번째 스타일의 '장점'은 의미 상 정확하다는 것입니다. 반면 첫 번째 스타일은 의미가 없습니다.

+0

그것은 매력적인 견적입니다. 로이가 몇 차례 진술을 한 것을 보았을 때 나는 그것을 더 많이 파헤쳐 야 할 것이다. –

+2

RFC2396 http://labs.apache.org/webarch/uri/rfc/rfc3986.html#query를 대체하는 RFC3986을 확인하십시오. 쿼리 섹션 3.4에는 다음 인용문이 있습니다. * 쿼리 구성 요소에는 경로 구성 요소의 데이터와 함께 URI 체계의 범위 내에서 리소스를 식별하는 비 계층 적 데이터가 포함되어 있습니다. * –

+0

흠 ... 흥미 롭습니다. 의미가 업데이트 된 RFC에 의해 변경되었다는 것을 깨달았습니다. 나는 원래 년 전에 읽었다. 방금 업데이트가 의미를 크게 변경하지 않을 것이라고 가정했습니다. 그게 나에게 배후에 있다고 가르쳐 줄거야. 2004 년처럼이 대답은 옳았 겠지만 이제는 잘못되었습니다. -S –

0

URL 스펙에 따라 쿼리 또는 검색이 아닌 URL에서 쿼리/검색 부분을 사용하지 마십시오. 원하지 않는 리소스에 대해 뭔가 의미가있을 수 있습니다.

더 큰 리소스의 하위 집합 인 리소스에 대해 쿼리 파트를 사용합니다. 페이지 매김이 적용될 수있는 좋은 예입니다.

관련 문제