http 인터페이스 개발 및 호출 사례

6652 단어 [아키텍처 설계]
지난 주말에 집에서 이 블로그를 쓰려고 했는데 어쩔 수 없이 자신의 지연증을 억제하지 못하고 월요일까지 끌었지만 이 글은 반드시 발표되어야 한다고 결심했다.이전에 했던 ITOO 프로젝트에서 모듈 간의 호출에 사용된 EJB의 세션 bean은 EJB가 분포식 사무에 대한 지원이 비교적 좋은 것 같지만 그 해를 많이 입었다.예를 들어 A모듈이 B모듈을 호출하려면 B모듈의 실체에 의존해야 한다.A모듈에서 JNDI를 통해 B모듈의 서버에 의존하는 서비스bean을 찾기 때문에 A모듈이 B모듈을 호출하려면 B모듈에 의존하는 실체bean이 필요하고 B모듈에 의존하는 서비스bean이 필요하다.이런 방안이 초래한 문제는 일단 B 모듈의 어떤 bean에 문제가 생기면 전체 호출 관계가 중단된다는 것이다.게다가 EJB의 세션 bean은 고가용 부하 균형 배치 방안에 대한 지원이 좋지 않아 호출 관계가 불안정하다.EJB의sessionbean과 비교하여 현재 우리는springboot 마이크로서비스 구조 개발 인터페이스를 사용하고 있습니다.인터페이스 개발 전에 인터페이스 개발자와 인터페이스 호출자가 인터페이스 규범을 정의하고 인터페이스 규범이 확정된 후wiki에 동기화한다.인터페이스 개발자와 인터페이스 호출자는 인터페이스 규범에 따라 양방향으로 작업을 전개한다.인터페이스 개발자에 대해 우리의 인터페이스 개발 방식은 다음과 같다.
@Path("/***")
@Produces(MediaType.APPLICATION_JSON)
public class ***Resource {

    @GET
    public ApiResponse list(@QueryParam("***") String ***, @DefaultValue("1") @QueryParam("***") int ***) {

        List *** = new ArrayList<>();

        ......

        return ApiResponseBuilder.ok().entity(***).build();
    }

}

list 메서드는 데이터 형식을 ApiResponse 엔티티로 되돌려주고 @Produces(MediaType.APPLICATION_JSON) 메모를 통해 엔티티를 json으로 되돌려줍니다. ApiResponse 엔티티의 내용은 다음과 같습니다.
public class ApiResponse {

    public static final Object EMPTY = "";

    private int status;

    private String message;

    private Object entity = EMPTY;

    /**
     * 
     */
    public static class ApiResponseBuilder{

        private ApiResponse apiResponse;

        public ApiResponseBuilder(ApiResponse resp){
            this.apiResponse = resp;
        }

        public static ApiResponseBuilder ok(){

            return status(HttpServletResponse.SC_OK).msg("ok");
        }

        public static ApiResponseBuilder status(int status){
            ApiResponse resp = new ApiResponse();
            resp.setStatus(status);

            return new ApiResponseBuilder(resp);
        }

        public ApiResponseBuilder msg(String msg){
            this.apiResponse.setMessage(msg);
            return this;
        }

        public ApiResponseBuilder entity(Object entity){
            this.apiResponse.setEntity(entity);
            return this;
        }

        public ApiResponse build(){

            return apiResponse;
        }
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getEntity() {
        return entity;
    }

    public void setEntity(Object entity) {
        this.entity = entity;
    }
}

이 인터페이스 개발 작업이 끝난 후에springboot의main 방법을 실행하면 전체 서비스가 달려갑니다.인터페이스가 고가용 배치를 어떻게 지원하는지에 대해 고가용api인터페이스 네트워크 배치 방안을 참고하여 인터페이스 호출자에 대해 응용 프로그램이 필요합니다.properties는 인터페이스에서 호출되는 URL 주소, 코드 레벨을 설정합니다. 우리는 org를 통해 호출합니다.springframework.web.client.RestTemplate는 다음과 같은 방식으로 인터페이스 호출을 시작합니다.
@Value(value = "${url}")
private String url;

RestTemplate temp = new RestTemplate();

String json = temp.getForObject(url, String.class, "***");

JsonNode root = ***.getJsonNode(json);

Entity entity = ***.getEntityFromJsonNode(root);

상기 방식의 인터페이스 개발과 호출을 사용하면 개발자와 호출자는 모두 인터페이스 규범에 의존한다. 이렇게 하면 인터페이스 개발자와 호출자의 결합 관계를 어느 정도 줄일 수 있고springboot 마이크로서비스 구조를 사용하면 인터페이스를 편리하게 배치하고 집단을 사용할 수 있다.나의 공유가 당신의 진보에 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기