From c979f9a660733dd78019059f065fefa7bdaeac2f Mon Sep 17 00:00:00 2001 From: Nick Kijak Date: Thu, 16 Jan 2020 02:56:03 -0500 Subject: [PATCH] Added Location header to run creation (#701) Fix for #699 Signed-off-by: Nicolas Kijak --- src/main/java/marquez/api/JobResource.java | 17 ++++++++++++++--- .../java/marquez/MarquezAppIntegrationTest.java | 2 ++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/marquez/api/JobResource.java b/src/main/java/marquez/api/JobResource.java index 65026e7002..91c5475b96 100644 --- a/src/main/java/marquez/api/JobResource.java +++ b/src/main/java/marquez/api/JobResource.java @@ -16,11 +16,11 @@ package marquez.api; import static javax.ws.rs.core.MediaType.APPLICATION_JSON; -import static javax.ws.rs.core.Response.Status.CREATED; import com.codahale.metrics.annotation.ExceptionMetered; import com.codahale.metrics.annotation.ResponseMetered; import com.codahale.metrics.annotation.Timed; +import java.net.URI; import java.util.List; import java.util.UUID; import javax.validation.Valid; @@ -33,7 +33,9 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; import marquez.api.exceptions.JobNotFoundException; @@ -146,7 +148,8 @@ public Response list( public Response createRun( @PathParam("namespace") String namespaceString, @PathParam("job") String jobString, - @Valid RunRequest request) + @Valid RunRequest request, + @Context UriInfo uriInfo) throws MarquezServiceException { log.debug("Request: {}", request); final NamespaceName namespaceName = NamespaceName.of(namespaceString); @@ -158,7 +161,15 @@ public Response createRun( final Run run = jobService.createRun(namespaceName, jobName, runMeta); final RunResponse response = Mapper.toRunResponse(run); log.debug("Response: {}", response); - return Response.status(CREATED).entity(response).build(); + final URI runLocation = + uriInfo + .getBaseUriBuilder() + .clone() + .path(this.getClass()) + .path(this.getClass(), "getRun") + .build(run.getId()); + + return Response.created(runLocation).entity(response).build(); } @Timed diff --git a/src/test/java/marquez/MarquezAppIntegrationTest.java b/src/test/java/marquez/MarquezAppIntegrationTest.java index 7d6aa1c392..c43244b9e7 100644 --- a/src/test/java/marquez/MarquezAppIntegrationTest.java +++ b/src/test/java/marquez/MarquezAppIntegrationTest.java @@ -293,6 +293,8 @@ public void testApp_createRunAndMarkAsComplete() { final Map run = response0.readEntity(Map.class); final String runId = (String) run.get("runId"); + assertThat(response0.getHeaderString("Location")).isEqualTo(baseUri + "/jobs/runs/" + runId); + final Response response1 = APP.client() .target(baseUri + "/jobs/runs/{id}/start")