2013-12-16 2 views
0

버스 스테이션에 대해 이야기하는 REST API를 설계하고 싶습니다.REST 리소스 간의 1 : 1 관계

예.

GET /stations/1asca2dac34 
    { 
     name: 'Queen str.' 
     lat: 50.45 
     lon: 9.63 
    } 

내 목표는 방송국 중 거리을 표현하기 위해 지금이다. 예를 들어, AAA와 BBB 사이의 거리는 5km입니다. 나는 REST 디자인에 대한 전문가가 아니다. 그런 1 : 1 관계를 설계하는 가장 좋은 방법은 무엇입니까?

나는 다음과 같은 해결책을 생각할 수 있지만, 그들이 REST 스타일에 맞는지 확실하지 않습니다. 사실 REST는 URI를 스타일에 예

1)

GET /distances/?station1=AAA&station2=BBB 
{ 
    uid: 123 
    station1=AAA 
    station2=BBB 
    km: 5 
} 

2)

GET /distances/AAA/BBB 
{ 
    uid: 123 
    station1=AAA 
    station2=BBB 
    km: 5 
} 

3)

GET /distances/123 
{ 
    uid: 123 
    station1=AAA 
    station2=BBB 
    km: 5 
} 

답변

3
내가 좋아하는 뭔가를 사용하는 것입니다

: 그는 모든 스테이션 (이름, ID가, 위치 정보는, 종류의 버스와 같은 수송의 목록을 얻을 것이다 경우 /역

/stations/1asca2dac34/distance?from=432dscas 

클라이언트 출발점 , 기차 등)에 대한 정보를 제공합니다.

모든 기본 자원 등의 클라이언트 링크를 제공 할 수 HATEOAS를 사용하여,에 거기에서 :

/stations/{id}/trains/timetable 
/stations/{id}/trains/{train_id}/timetable 
/stations/{id}/foobar 

당신 경우 :

/stations/{id}/distance?from={id} 

그리고 아마도 다른 스테이션 관련 물건

/거리를 시작하는 것이 이상한 일입니다. 왜냐하면 나는 하나의리스트가 어떤 종류의 목록을 반환 할 것인지를 "추측"할 수 없기 때문입니다. 귀하의 선택 사항 중 어느 것도 잘못은 없다는 것을 먼저 말씀 드리지만 결론은 고객 소비자에게 "추측 할 수있는"/ "추측할만한"것이라고 말합니다.

Joshua Moore가 말한 내용에 동의하십시오. '거리'리소스가 귀하의 고객에게 의미가 있습니까? 아니면 시작점 (예 : 방송국) 하나에서 모든 것이 추출 될 수 있습니까? 이는 이것이 귀하의 API가 전부입니까?

+0

하이퍼 미디어를 잘 사용합니다. 잘보아야합니다./stations/AAA로부터의 초기 응답은/stations/AAA/distance? from = {id} 형태로 클라이언트가 런타임에 URL을 발견 할 수있게 해주는 URL 템플릿을 반환 할 수 있습니다. 그 URL 템플리트는 링크 관계로 표시되어 클라이언트가 link-rel-id로 템플리트를 찾을 수 있습니다. 링크가 포함 된 미디어 유형 (예 : HAL) (http://stateless.co/hal_specification.html)을 참조하십시오. –

1

모든입니다. 그것은 의견과 적용의 문제입니다. 타겟 고객을 고려하십시오. # 1 쿼리에 대한 매개 변수를 제공하기 때문에 많은 의미가 있습니다. # 2는 귀하의 API 사용자가 이해하기 어려울 것으로 보이고 # 3은 더욱 추상적이며 귀하의 API 사용자가 데이터의 uid를 알고 있다고 가정합니다.

"소비자에게 가장 적합한 것은 무엇입니까?"

저의 겸허 한 의견입니다.

1

나는 역에 대한 출발점이 /stations/{id}이어야하고 거기에서 /stations/{id}/distances에 대한 링크를 노출시킬 수 있다고 제안합니다. 이 두 번째 URI는이 스테이션에서 다른 모든 스테이션까지의 거리를 나열합니다.이 데이터는 사용자에게 달려 있습니다.최종 URI는 매우 간단한 그림을 반환 할 수있는 형태 인 /stations/{id-a}/distances/{id-b}을 사용합니다. 일반적으로 가능한 경우 쿼리 문자열을 사용하지 않아야합니다.

0

쿼리가없는 또 다른 RESTful 가능성은 URI 구분 기호를 사용하는 것입니다.

GET/국/{st_a, st_b} 당신의 URI를 쉽고 깨끗

이 디자인으로. 세미콜론은 상호 교환 가능한 ID를 의미합니다 (Richardson 첫 번째 책).

반환 JSON은 간단한 값입니다. 거리는 계산의 값이기 때문에 I 리소스입니다.