문제

내가 올바르게 이해했다면 나머지 스타일에서는 모든 쿼리(즉, 리소스 상태를 수정하지 않는 모든 리소스에 대한 모든 작업)가 본문 없이 get 메서드를 사용하여 쿼리 문자열에 인코딩되어야 합니다.

내가 맞나요?

글쎄, Visual Basic 6 구성 요소에 의해 처리되는 XML 메시지를 통해 db와 통신하는 여러 응용 프로그램이 있습니다.

쿼리 메시지는 다음과 같습니다.

<xml>
  <service>account</service>
  <resource>invoice</resource>
  <action>query</action>
  <parameters>
    <page>1</page>
    <page_len>10</page_len>
    <order>date</order>
    <fields>*</fields>
    <conditions>
      <date>2009-01-01..2009-01-31</date>
      <customer_id>24</customer_id>
    </conditions>
  </parameters>
</xml>

지금 우리는 XML 메시지를 재설계하는 중이며 RESTful 인터페이스에 쉽게 매핑될 수 있는 방식으로 이를 수행하고 싶습니다.

이전 예에서는 매개변수와 조건 사이의 충돌을 방지하기 위해 "conditions" 태그가 필요합니다(즉, "order", "page" 또는 이와 유사한 이름의 필드가 있는 경우 어떻게 됩니까?)

우리는 다음과 같은 접두사를 사용하여 매개변수를 보내는 것에 대해 생각합니다.

http://account/invoice/?_page=1&_page_len=10&_order=date&_fields=*&date=2009-01-01..2009-01-31&customer_id=24

XML은 다음과 같습니다.

[...]
    <_order>date</_order>
    <_fields>*</_fields>
    <date>2009-01-01..2009-01-31</date>
    <customer_id>24</customer_id>
[...]

우리는 crud 작업을 위한 매우 간단한 XML 형식을 정의하려고 노력하고 있으며 결과 XML을 나머지 또는 JSON에 쉽게 매핑할 수 있습니다.

나머지 애플리케이션에서 이러한 종류의 쿼리를 어떻게 매핑하시겠습니까?어떤 표준이 정의되어 있나요?아니면 잔해/XML/JSON 샘플이 있는 페이지가 있나요?오류를 반환하거나 중첩된 데이터세트는 어떻습니까?

정말 감사합니다.

도움이 되었습니까?

해결책

IMHO 시스템을 진정으로 편안하게 만들려면 보낼 모든 메시지/쿼리를 다시 생각해야합니다.

이 부분:

<conditions>
  <date>2009-01-01..2009-01-31</date>
  <customer_id>24</customer_id>
</conditions>

까다로운 부분입니다. 어떤 종류의 다른 조건이 있습니까? 많은 것이 있습니까? 이 특별한 예는 송장을 고객의 하위 소스로 취급 할 수 있다고 생각합니다. 휴식을 취하면 항상 경로에서 리소스를 식별하려고 노력하고 쿼리 스틸에 매개 변수가 필요한 경우 쿼리 문자열로 이동합니다. 그래서 나는 다음과 같은 글을 쓸 것입니다.

GET /customers/24/invoices?start_date=2009-01-01&end_date=2009-01-31

자원 간의 관계에 대해 생각해보십시오. 자원 유형 FOO 관련 리소스 유형 막대가 -to -many 관계에 따라 있다고 가정 해 봅시다. 이 경우 다음과 같은이 관계에 대해 물어볼 수 있습니다. GET /foo/123/bar 쿼리 문자열 매개 변수를 추가하여 필터링하십시오. 문제는 다른 자원과의 관계를 포함하는 방식으로 필터링하려고 할 때 시작됩니다. IMHO 이것은 귀하의 리소스 디자인이 진정으로 편안하지 않다는 것을 의미합니다.

다른 팁

XML을 전달하려면 URL을 인코딩해야 하지만, XML을 json으로 변환한 경우 해당 문자열을 전달한 다음 json->xml 또는 json->object를 전달하여 처리할 수 있습니다.이렇게 하면 더 복잡한 객체를 전달할 수 있습니다.

완벽하지는 않지만 작동합니다.:)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top