Skip to content

Commit eb16fc9

Browse files
authored
Enhance recommendation API to support X-API-Version header for score retrieval (#1140)
1 parent 93bec9c commit eb16fc9

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

server/rest.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -529,9 +529,10 @@ func (s *RestServer) CreateWebService() {
529529
Returns(http.StatusOK, "OK", []cache.Score{}).
530530
Writes([]cache.Score{}))
531531
ws.Route(ws.GET("/recommend/{user-id}").To(s.getRecommend).
532-
Doc("Get recommendation for user.").
532+
Doc("Get recommendation for user. Set X-API-Version: 2 to return scores.").
533533
Metadata(restfulspec.KeyOpenAPITags, []string{RecommendationAPITag}).
534534
Param(ws.HeaderParameter("X-API-Key", "API key").DataType("string")).
535+
Param(ws.HeaderParameter("X-API-Version", "API version (set to 2 to return scores)").DataType("string")).
535536
Param(ws.PathParameter("user-id", "User ID").DataType("string")).
536537
Param(ws.QueryParameter("category", "Category of the returned items (support multi-categories filtering)").DataType("string")).
537538
Param(ws.QueryParameter("write-back-type", "Type of write back feedback").DataType("string")).
@@ -541,9 +542,10 @@ func (s *RestServer) CreateWebService() {
541542
Returns(http.StatusOK, "OK", []string{}).
542543
Writes([]string{}))
543544
ws.Route(ws.GET("/recommend/{user-id}/{category}").To(s.getRecommend).
544-
Deprecate().Doc("Get recommendation for user.").
545+
Deprecate().Doc("Get recommendation for user. Set X-API-Version: 2 to return scores.").
545546
Metadata(restfulspec.KeyOpenAPITags, []string{RecommendationAPITag}).
546547
Param(ws.HeaderParameter("X-API-Key", "API key").DataType("string")).
548+
Param(ws.HeaderParameter("X-API-Version", "API version (set to 2 to return scores)").DataType("string")).
547549
Param(ws.PathParameter("user-id", "User ID").DataType("string")).
548550
Param(ws.PathParameter("category", "Category of the returned items").DataType("string")).
549551
Param(ws.QueryParameter("write-back-type", "Type of write back feedback").DataType("string")).
@@ -843,6 +845,7 @@ func (s *RestServer) getRecommend(request *restful.Request, response *restful.Re
843845
}
844846
// parse arguments
845847
userId := request.PathParameter("user-id")
848+
apiVersion := strings.TrimSpace(request.HeaderParameter("X-API-Version"))
846849
n, err := ParseInt(request, "n", s.Config.Server.DefaultN)
847850
if err != nil {
848851
BadRequest(response, err)
@@ -900,6 +903,10 @@ func (s *RestServer) getRecommend(request *restful.Request, response *restful.Re
900903
}
901904
}
902905
// Send result
906+
if apiVersion == "2" {
907+
Ok(response, scores)
908+
return
909+
}
903910
Ok(response, results)
904911
}
905912

server/rest_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,6 +1010,18 @@ func (suite *ServerTestSuite) TestGetRecommends() {
10101010
Status(http.StatusOK).
10111011
Body(suite.marshal([]string{"1", "3", "5"})).
10121012
End()
1013+
apitest.New().
1014+
Handler(suite.handler).
1015+
Get("/api/recommend/0").
1016+
Header("X-API-Key", apiKey).
1017+
Header("X-API-Version", "2").
1018+
QueryParams(map[string]string{
1019+
"n": "3",
1020+
}).
1021+
Expect(suite.T()).
1022+
Status(http.StatusOK).
1023+
Body(suite.marshal([]cache.Score{{Id: "1", Score: 99}, {Id: "3", Score: 97}, {Id: "5", Score: 95}})).
1024+
End()
10131025
apitest.New().
10141026
Handler(suite.handler).
10151027
Get("/api/recommend/0").

0 commit comments

Comments
 (0)