本文主要研究下Eureka Server的REST APIjava
eureka-core-1.8.8-sources.jar!/com/netflix/eureka/resources/ApplicationsResource.javagit
@Path("/{version}/apps") @Produces({"application/xml", "application/json"}) public class ApplicationsResource { @Path("{appId}") public ApplicationResource getApplicationResource( @PathParam("version") String version, @PathParam("appId") String appId) { CurrentRequestVersion.set(Version.toEnum(version)); return new ApplicationResource(appId, serverConfig, registry); } //... @GET public Response getContainers(@PathParam("version") String version, @HeaderParam(HEADER_ACCEPT) String acceptHeader, @HeaderParam(HEADER_ACCEPT_ENCODING) String acceptEncoding, @HeaderParam(EurekaAccept.HTTP_X_EUREKA_ACCEPT) String eurekaAccept, @Context UriInfo uriInfo, @Nullable @QueryParam("regions") String regionsStr) { //... } @Path("delta") @GET public Response getContainerDifferential( @PathParam("version") String version, @HeaderParam(HEADER_ACCEPT) String acceptHeader, @HeaderParam(HEADER_ACCEPT_ENCODING) String acceptEncoding, @HeaderParam(EurekaAccept.HTTP_X_EUREKA_ACCEPT) String eurekaAccept, @Context UriInfo uriInfo, @Nullable @QueryParam("regions") String regionsStr) { //... } }
這裏提供三個接口:
對於spring cloud eureka來講,這裏的version是eureka
eureka-core-1.8.8-sources.jar!/com/netflix/eureka/resources/ApplicationResource.javagithub
@GET public Response getApplication(@PathParam("version") String version, @HeaderParam("Accept") final String acceptHeader, @HeaderParam(EurekaAccept.HTTP_X_EUREKA_ACCEPT) String eurekaAccept) { //... } @Path("{id}") public InstanceResource getInstanceInfo(@PathParam("id") String id) { return new InstanceResource(this, id, serverConfig, registry); } @POST @Consumes({"application/json", "application/xml"}) public Response addInstance(InstanceInfo info, @HeaderParam(PeerEurekaNode.HEADER_REPLICATION) String isReplication) { //... }
這裏提供三個接口
eureka-core-1.8.8-sources.jar!/com/netflix/eureka/resources/InstancesResource.javaspring
@Produces({"application/xml", "application/json"}) @Path("/{version}/instances") public class InstancesResource { @GET @Path("{id}") public Response getById(@PathParam("version") String version, @PathParam("id") String id) { //... } }
這裏提供一個接口
eureka-core-1.8.8-sources.jar!/com/netflix/eureka/resources/StatusResource.javajson
@Path("/{version}/status") @Produces({"application/xml", "application/json"}) public class StatusResource { @GET public StatusInfo getStatusInfo() { return statusUtil.getStatusInfo(); } //... }
這裏提供一個接口
eureka-core-1.8.8-sources.jar!/com/netflix/eureka/resources/VIPResource.javaapi
@Path("/{version}/vips") @Produces({"application/xml", "application/json"}) public class VIPResource extends AbstractVIPResource { @GET @Path("{vipAddress}") public Response statusUpdate(@PathParam("version") String version, @PathParam("vipAddress") String vipAddress, @HeaderParam("Accept") final String acceptHeader, @HeaderParam(EurekaAccept.HTTP_X_EUREKA_ACCEPT) String eurekaAccept) { return getVipResponse(version, vipAddress, acceptHeader, EurekaAccept.fromString(eurekaAccept), Key.EntityType.VIP); } }
這裏提供一個接口
eureka-core-1.8.8-sources.jar!/com/netflix/eureka/resources/SecureVIPResource.javamvc
@Path("/{version}/svips") @Produces({"application/xml", "application/json"}) public class SecureVIPResource extends AbstractVIPResource { @GET @Path("{svipAddress}") public Response statusUpdate(@PathParam("version") String version, @PathParam("svipAddress") String svipAddress, @HeaderParam("Accept") final String acceptHeader, @HeaderParam(EurekaAccept.HTTP_X_EUREKA_ACCEPT) String eurekaAccept) { return getVipResponse(version, svipAddress, acceptHeader, EurekaAccept.fromString(eurekaAccept), Key.EntityType.SVIP); } }
這裏提供一個接口
eureka-core-1.8.8-sources.jar!/com/netflix/eureka/resources/PeerReplicationResource.javaapp
@Path("/{version}/peerreplication") @Produces({"application/xml", "application/json"}) public class PeerReplicationResource { @Path("batch") @POST public Response batchReplication(ReplicationList replicationList) { //.... } }
這裏提供一個接口
eureka server的rest api是使用javax.ws實現的。而後spring cloud的版本,其version傳的是eureka值。使用javax.ws實現的接口,感受比起spring mvc來講,很是很差找映射,稍微有點費勁。this