2016-06-18 2 views
9

Microservices를 올바르게 설정하는 방법에 대해 많이 읽었으며 다음과 같은 몇 가지 최신 개념을 사용하고 있습니다. HAL, ALPS 및 HAL 브라우저. 역사적으로 Swagger UI를 활용 한 것을 문서화했지만, URL 중심이 적절한 방법이 아니며 새로운 기술이 필요로하는 리소스와 링크를 문서화해야한다는 것을 알게되었습니다. 이 새로운 개념에 대한 지식 격차는 상당하므로이 기술들이 어떻게 작동하는지에 대한 올바른 이해를 얻고 싶었습니다. 그래서 각각에 대해 배울 때 퍼즐에 맞출 수 있습니다.마이크로 서비스 아키텍처 (HAL, ALPS)에서 안정적인 서비스를위한 문서를 올바르게 설정하는 방법

나의 현재 이해는 다음과 같습니다

HAL이 - 당신이 링크를 통해 API를 탐색하게됩니다 JSON의 상단에 추가 형식입니다.

ALPS - 자원에 대한 자신감 UI 교체 및 중심의 문서를 링크 - 그것은 내 자원

HAL 브라우저을 설명하기 위해 영어를 기반으로 설명을 제공하도록 할 수 있습니다 JSON의 상단에 추가 형식입니다. HAL과 ALPS 모두 함께 작동합니까?

일부 기술 분야에 대한 현재의 지식이 정확하거나 부족할 수 있습니까? 또한 구현 현명한 나는 ALPS와 HAL이 어떻게 상호 작용하는지 완전히 이해하지 못하고있다. 나는 hal + json 형식과 알프스 + json 형식을 알고 있었지만 hal + alps + json 형식을 보지 못했습니다.

내가 정리할 마지막 부분은 이러한 리소스를 노출하는 방법입니다. 일반적으로 필자는 항상 매우 희박한 json 메시지에 초점을 맞추어 예상되는 위치에서 hal + json 형식을 전송하고 있거나 다른 URL에서 그 엔드 포인트를 호스팅해야합니다.

+0

@OliverGierke가 도와 드릴 수 있습니까? –

답변

3

Buddy! 그 지옥의 정보를 당신이 여기에서 감지하려고 노력하고 있습니다. 단계별로 설명하겠습니다.

문서 중심은 서비스 간 전환을 의미하며 예를 들어 웹에서 정보를 의미 론적으로 공유 (또는 데이터 유형으로 이해)해야합니다.

단계 1 아래 그림 하이퍼 즉 HTML, XML, JSON, HAL 등 예 JSON 들어 임의의 형태가 될 수있는 데이터 유형 메타 데이터 및 표준 데이터 유형 서비스에 사용되는 프로토콜 (HTTP) 링크가있는 루트 문서 'todos'와 'profile'은 모두 HAL 기반의 하이퍼 미디어 링크이며 HAL은 현재 API 만 보강합니다.

{ "_links" : { 
    "todos" : { 
     "href" : "http://localhost:8080/todos" 
    }, 
    "profile" : { 
     "href" : "http://localhost:8080/alps" 
    } 
    } 
} 

자원의 의미론을 가리킬 수있는 가능한 자원 링크가 있습니다. HAL 주요 초점은 링크, 속성 및/또는 포함으로 리소스/템플릿을 연결하는 것입니다. 위에서 설명한 제약은 주로 프로토콜 수준에서 공유 데이터 유형 링크입니다.

단계 : 2 ALPS 위의 JSON에서 의미 응용 프로그램 수준의 어포던스는 내가 할 일이 무엇인지 알고 있지만 어떻게 상호 작용 할 수 있습니까? Todo와 상호 작용하려면 응용 프로그램 수준의 상태 전환이 필요합니다. 아래 링크를 탐색하여 '설명자'및 '유형'(SEMANTIC, SAFE, UNSAFE 등)과 같은 자세한 키워드를 보여주는 'todo'JSON을 고려하십시오.

'id'속성은 표현 식별자가됩니다. 이들은 독립적 인 ALPS 상태 및 전환을 적용하기위한 규칙 또는 규칙입니다.

{ "version" : "1.0", 
    "descriptors" : [ { 
    "id" : "todo-representation", 
    "descriptors" : [ { 
     "name" : "description", 
     "doc" : { 
     "value" : "Details about the TODO item", 
     "format" : "TEXT" 
     }, 
     "type" : "SEMANTIC" 
    }, { 
     "name" : "title", 
     "doc" : { 
     "value" : "Title for the TODO item", 
     "format" : "TEXT" 
     }, 
     "type" : "SEMANTIC" 
    }, { 
     "name" : "id", 
     "type" : "SEMANTIC" 
    } ] 
    }, { 
    "id" : "get-todos", 
    "name" : "todos", 
    "type" : "SAFE", 
    "rt" : "#todo-representation" 
    }, { 
    "id" : "create-todos", 
    "name" : "todos", 
    "type" : "UNSAFE", 
    "rt" : "#todo-representation" 
    }, { 
    "id" : "delete-todo", 
    "name" : "todo", 
    "type" : "IDEMPOTENT", 
    "rt" : "#todo-representation" 
    }, { 
    "id" : "patch-todo", 
    "name" : "todo", 
    "type" : "UNSAFE", 
    "rt" : "#todo-representation" 
    }, { 
    "id" : "get-todo", 
    "name" : "todo", 
    "type" : "SAFE", 
    "rt" : "#todo-representation" 
    } ] 
} 

일부 링크는 세부 slides about ALPSRest Example에서 확인 할 가치가있다. 희망이 당신을 이해하는데 도움이되었습니다.

+0

답장을 보내 주셔서 감사합니다. 이 설명은 무리를 도왔습니다! –

+0

기쁘다, 그것은 정말로 당신을 위해 일했다 =) – AHashmi

0

각 마이크로 서비스 자체에 API 문서 URL이 있습니다. 예 : http://myservice1domain:8080/swagger-ui.html. 나는 ALPS를 사용하지 않았다. 또한, 나는 당신이해야 할 것 같지 않거나, 응답 데이터와 바인딩되어 있기 때문에 HAL 종류의 것들만을 구체적으로 노출 할 수 있다고 생각하지 않습니다. 어쨌든 HAL은 샘플 요청 본문과 json right 응답을 사용하여 사용자에게 공개합니다.

+0

내 이해에서 HAL은 자원을 문서화하기위한 것이지, 자원을 포함하는 URL을 문서화하는 것을 의미합니다. 우리가 가장 관심이있는 것은 자원이므로 HAL 문서는 훌륭한 접근 방법입니다. –