2009-02-26 3 views
0

another question에서 간단한 RESTful 웹 서비스 구현 방법을 묻습니다. 그러나 내가 정의한 API는 특별히 RESTful하지 않았다는 것이 지적되었습니다. 내 질문 : 그것은 나쁜 것입니까? 구체적으로 : 그러한 API를 정의하는 다른 방법은 무엇입니까?
다른 질문에서 문제 정의의 답을 추가하겠습니다. 엄격히 정성을 다한 RESTful 버전은 물론 다른 사람들이 제안 할 수있는 변형이나 개선점을보고 싶습니다.간단한 웹 서비스/API의 변형 : 숫자 목록 합계

목표는 단순히 숫자 목록을 합산하는 서비스를 제공하는 것입니다. 답변 당 하나의 웹 서비스/API 정의입니다.


은 (물론 요점은 말 그대로 그런 바보 같은 웹 서비스를 제공하지 않는 것입니다. 이것은 통일 된 예로서이와 함께, 간단한 웹 서비스의 우아한 디자인에 대한 질문이 될하기위한 것입니다.)

답변

1

는 여기 API가 이길 수 있습니다. 형태

http://server.com/sum?summands=LIST 

의 호출은 LIST 공간 분리 된 실수 및 SUM 목록은

<sum>SUM</sum> 

그들의 합 반환한다. 그것은 또한 결과의 형식을 지정하는 옵션 "output"매개 변수를 제공 할

http://server.com/sum?summands=1+2+3 

가 이상적으로

<sum>6</sum> 

를 반환해야합니다 예를 들어

,. 예를 들어,

http://server.com/sum?summands=2+2&output=json 

{"sum" : 4} 
+0

"LIST는 공백으로 구분 된 실수 목록입니다."URL의 공백이 싫은 부분이기 때문에 공백 이외의 다른 구분 기호가 유용 할 수 있습니다. (귀하의 예에서는 그 이외의 "+")를 사용하는 것을 볼 수 있습니다 : just right =) –

+0

감사합니다! '+'는 실제로 URL의 공간을 인코딩하는 표준 방법이므로 '1 + 2 + 3'은 '1 2 3'의 URL 인코딩 렌더링입니다. – dreeves

1

내가 REST의 이점이 더 크고 더 복잡한 API에 대한 보여주기 시작주의/변명으로 시작됩니다 반환합니다. 다음 해결책은 아마 그런 사소한 문제에 꽤 귀찮은 것 같습니다. 그 말은,

먼저 목록을 나타낼 수있는 기존 미디어 유형을 찾아 보겠습니다. 검색 필터로 사용하는 것을 선호하기 때문에 쿼리 문자열 매개 변수를 사용하지 않습니다. 미디어 유형으로 html을 사용합니다. 지원 목록을 염두에 두어야하기 때문입니다.

<ul> 
    <li>1</li> 
    <li>2</li> 
    <li>3</li> 
</ul> 

둘째, 합계를 수행 할 "데이터 처리"리소스를 정의합니다. 데이터 처리에

폼을 제출 결과 데이터의 블록을 제공 : RFC2616은 POST가 사용될 수 여서

http://example.org/SummingMachine 

는 I는 POST 방법을 사용 공정

그래서

합계를 할 내가 할 것

POST http://example.org/SummingMachine 

그리고 POST의 본문에 HTML 목록을 보냅니다. 같은으로 돌아올 수 결과 :

<div class="result">6</div> 

  • 는 표현
  • 자원에 대한 표준 미디어 유형을 사용하기 때문에이 솔루션은 원본보다 더 편안하고 있음을 제안하는 동사 대신 명사가 정의 됨
  • GET을 사용하는 대신 POST를 사용하여 "데이터 처리"프로세스를 수행합니다.