Skip to content

Commit 544a425

Browse files
Merge pull request #632 from Swirrl/sparql-query-format-param
accept query parameter as alternative to header
2 parents a1cb46b + 342d842 commit 544a425

File tree

4 files changed

+42
-3
lines changed

4 files changed

+42
-3
lines changed

drafter/doc/drafter.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,7 @@ paths:
463463
- $ref: '#/parameters/graph'
464464
- $ref: '#/parameters/union-with-live'
465465
- $ref: '#/parameters/timeout'
466+
- $ref: '#/parameters/accept'
466467
summary: Access the quads inside this Draftset
467468
description: |
468469
Request the contents of this draftset in any supported RDF
@@ -569,6 +570,7 @@ paths:
569570
- $ref: '#/parameters/timeout'
570571
- $ref: '#/parameters/default-graph-uri'
571572
- $ref: '#/parameters/named-graph-uri'
573+
- $ref: '#/parameters/accept'
572574

573575
tags:
574576
- Querying
@@ -605,6 +607,7 @@ paths:
605607
- $ref: '#/parameters/timeout'
606608
- $ref: '#/parameters/post_default-graph-uri'
607609
- $ref: '#/parameters/post_named-graph-uri'
610+
- $ref: '#/parameters/accept'
608611
tags:
609612
- Querying
610613
responses:
@@ -672,6 +675,7 @@ paths:
672675
- $ref: '#/parameters/timeout'
673676
- $ref: '#/parameters/default-graph-uri'
674677
- $ref: '#/parameters/named-graph-uri'
678+
- $ref: '#/parameters/accept'
675679
tags:
676680
- SPARQL Endpoints
677681
responses:
@@ -704,6 +708,7 @@ paths:
704708
- $ref: '#/parameters/timeout'
705709
- $ref: '#/parameters/post_default-graph-uri'
706710
- $ref: '#/parameters/post_named-graph-uri'
711+
- $ref: '#/parameters/accept'
707712
tags:
708713
- SPARQL Endpoints
709714
responses:
@@ -1078,6 +1083,12 @@ parameters:
10781083
type: boolean
10791084
allowEmptyValue: true
10801085
default: false
1086+
accept:
1087+
name: accept
1088+
in: query
1089+
required: false
1090+
type: string
1091+
description: Alternative to accept header for clients with no option to set headers
10811092

10821093
definitions:
10831094
Graph:

drafter/src/drafter/requests.clj

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
(ns drafter.requests)
22

33
(defn accept
4-
"Returns the Accept header for a request if one exists."
4+
"Returns the accept header or query parameter for a request if either exists.
5+
The query parameter has precedence over the header, since it is likely to be
6+
used in cases where the user has no control over the header."
57
[request]
6-
(get-in request [:headers "accept"]))
8+
(or (get-in request [:params :accept])
9+
(get-in request [:headers "accept"])))
710

811
(defn query
912
"Returns the query string for a request map"

drafter/test/drafter/feature/draftset_data/show_test.clj

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,17 @@
134134
data-request (tc/with-identity test-editor data-request)
135135
data-response (handler data-request)]
136136
(tc/assert-is-not-acceptable-response data-response))))
137+
138+
(tc/deftest-system-with-keys get-draftset-quads-data-with-accept-in-query
139+
keys-for-test
140+
[{handler [:drafter/routes :draftset/api]} system]
141+
(let [draftset (help/create-draftset-through-api handler test-editor)]
142+
(help/append-data-to-draftset-through-api
143+
handler test-editor draftset "test/resources/test-draftset.trig")
144+
(let [accepted "*/*"
145+
data-request (help/get-draftset-quads-accept-request
146+
draftset test-editor accepted "false")
147+
data-request (assoc-in data-request [:params :accept] "text/csv")
148+
data-response (handler data-request)]
149+
(tc/assert-is-ok-response data-response)
150+
(is (= "text/csv" (get-in data-response [:headers "Content-Type"]))))))

drafter/test/drafter/rdf/sparql_protocol_test.clj

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,18 @@
8484
response (handler {:uri "/test"
8585
:sparql {:prepared-query pquery}
8686
:headers {"accept" "text/trig"}})]
87-
(tc/assert-is-not-acceptable-response response))))
87+
(tc/assert-is-not-acceptable-response response)))
88+
89+
(testing "Content negotiation via query parameter"
90+
(let [handler (sparql-negotiation-handler identity)
91+
pquery (prepare-query-str "SELECT * WHERE { ?s ?p ?o }")
92+
request {:uri "/sparql"
93+
:sparql {:prepared-query pquery}
94+
:headers {"accept" "*/*"}
95+
:params {:accept "application/json"}}
96+
{{:keys [format response-content-type]} :sparql} (handler request)]
97+
(is (= "application/json" response-content-type))
98+
(is (some? format)))))
8899

89100
(deftest sparql-timeout-handler-test
90101
(testing "With valid timeout"

0 commit comments

Comments
 (0)