2016-12-19 10 views
0

디커플링 유지하면서 데이터를 표현하는 방법에 클라이언트를 암시하는 방법의 우리가 지금처럼 사용자의 개인 정보를 저장하는 가정 해 봅시다 (여기 JSON,하지만 그 시점이 아니다) :REST 서비스 - 단순화하기 위해

{ 
    "name": "John" 
    "age": 35 
    "sex": "M" 
} 

이 정보를 표시하고 새 사용자를 작성하거나 기존 사용자를 업데이트하기 위해 양식을 작성하는 UI 클라이언트가 있어야합니다.

그래서, 내 질문은 :

방법이이 편안한 방식으로 달성 할 수 있는가? REST는 이러한 유형의 상호 작용을 제공합니다. 즉, 제공되는 자원을 표시하는 방법에 대해 고객에게 암시하는 것입니까?

우리는 클라이언트에게 리소스를 표현하는 방법에 대해 최대한 자유롭게하고 싶습니다. 또한 백엔드와 프론트 엔드간에 너무 많은 연결을하지 않아도 올바른 데이터를 보내 줄 수 있습니다.

예를 들어, 우리는과 같이 user에 대한 템플릿을 할 수 :

{ 
    "self": "/template/user" 
    "method": "GET" 
    "data": { 
     "fields": [ 
       { 
        "name": "name" 
        "value": { 
         "data_type": "string"      
        } 
       }, 
       { 
        "name": "age" 
        "value": { 
         "data_type": "number"      
        } 
       }, 
       { 
        "name": "sex" 
        "value": { 
         "data_type": "string" 
         "options": [ 
          "M", 
          "F" 
         ] 

        } 
       } 
     ] 
    } 
} 

당신이 제공 할 수있을 수있는 입력 주셔서 감사합니다.

+0

샘플에 JSON이 포함되어 있으므로 [json-schema] (http://json-schema.org/)에서 요청의 실제 유효한 입력 또는 예상 필드를 설명 할 수 있습니다. XML 기반 메시지의 경우 XSD (또는 DTD)를 사용하여 클라이언트에게 보낼 것으로 예상되는 내용을 알려줄 수 있습니다. 다른 문서 유형의 경우 클라이언트를 가르치거나 지원하는 방법에 대해 다소 덜 명확 해집니다. 클라이언트는 기본 미디어 유형 (예 :'application/json') 에서처럼 이러한 기능을 지원할 수있는 특별한 미디어 유형을 필요로 할 수 있습니다. 즉,이 스키마를 그대로 사용하지 않을 수도 있습니다. –

+0

이전 주석이 "teach 다시 보내야 할 대상에 대한 클라이언트 "우려와 덜보기 지원에, 내 의견은 내가 추측하는 데 도움이되지 않을 수도 있습니다. API 또는 서버가 클라이언트에게 양식 제시 방법을 암시하는 데 도움이되는 경우 서버에서 클라이언트로 특정 HTML 출력 (양식 포함)을 보내지 않는 이유는 무엇입니까? 클라이언트가 브라우저 (또는 브라우저를 인식하는 구성 요소) 인 경우 폼을 표시하는 것은 응답을 단순하게 렌더링하는 것입니다.클라이언트는 내용 협상 ('text/html')을 통해 도움을 요청하거나 자신의 물건 ('application/json')을 할 수 있습니다. –

+0

대단히 고맙습니다. 왜 @voiceofunreason에 대한 내 의견을 보니 왜 내가 피하려고했는지 보았습니다. HTML을 보냈습니다. – Johnny

답변

0

어떻게 RESTful 방식으로 달성 할 수 있습니까? REST는 이러한 유형의 상호 작용을 제공합니다. 즉, 제공되는 자원을 표시하는 방법에 대해 고객에게 암시하는 것입니까?

REST의 참조 응용 프로그램은 월드 와이드 웹입니다. 우리가 어떻게 그곳에서 그것을 했습니까?

1) 우리는 고객의 판단에 따라, 우리는 보조 리소스에 대한 링크를 제공하는 엔진

2) 렌더링 클라이언트의 선택에 의해 해석 될 수 밴드 프리젠 테이션의 지시에 지원되는 미디어 형식 (HTML)를 (사용 CSS)을 사용하여 렌더링 엔진에 추가 프레젠테이션 힌트를 제공 할 수 있습니다.

text/html 및 text/css가 잘 정의되어있어 (표준화되어 있음) 렌더링 엔진 (브라우저)을 서버와 독립적으로 개발할 수 있다는 점에 유의하십시오.

클라이언트와 렌더링 지시를 공유하기위한 표준으로 HTML에 대한 대안을 보지 못했습니다. 첫 번째 방법은 데이터 표현과 HTML 표현을 연결하는 것입니다.이 표현은 클라이언트가 렌더링을 이해하는 데 사용할 수 있습니다.

+0

당신과 @RomanVottner 모두 HTML을 보내라 고 제안합니다. 이유를 완전히 이해하는 동안 클라이언트를 최대한 자유롭게하고 싶었 기 때문에 이것을 정확하게 피하려고했습니다. 예를 들어'options'는 선택 드롭 다운이나 라디오 버튼으로 렌더링 될 수 있습니다. 클라이언트가 다른 표현을 선호하여 하나의 표현을 사용하도록 강제한다면 나는 그것을 궁극적으로 제한 할 것입니다. – Johnny