metosin / metosin/compojure-api

inconsistency in resource vs. macro based route definition behaviour

Abierto
#321 0 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Clojure
Estrellas
1.1k
Forks
146
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

When making:

```
curl -X POST \
'http://localhost:7777/foo?rule_name=foo.logic&force_overwrite=true&version=1.1' \
-H 'accept: application/json' \
-H 'cache-control: no-cache' \
-H 'content-type: text/plain' \
-d 'bla'
```

the following definition behaves correctly:

```
(POST "/foo" []
:middleware [[muuntaja.middleware/wrap-format
(muuntaja/create
(assoc-in muuntaja/default-options
[:formats "text/plain"] text-plain-format))]]
:query-params [version :- String, rule_name :- String, force_overwrite :- String]
:body [b s/Str]
:return s/Any
(ok
{:ok b})
```

on other hand this one is failing

```
(context "/foo" []
(resource {
:post {
:middleware [[muuntaja.middleware/wrap-format
(muuntaja/create
(assoc-in muuntaja/default-options
[:formats "text/plain"] text-plain-format))]]

:parameters {:body-params String
:query-params {:version s/Str
:rule_name s/Str
:force_overwrite s/Str}}
:consumes ["text/plain"]
:responses {http-status/ok {:schema s/Any}}
:handler (fn [{body :body-params {:keys [version rule_name]} :path-params}]
(ok
{:foo body}
))}}))

```

the error is:

```
{
"schema": "java.lang.String",
"errors": "(not (instance? java.lang.String nil))",
"type": "compojure.api.exception/request-validation",
"coercion": "schema",
"value": null,
"in": [
"request",
"body-params"
]
}
```

I use this auxiliary fun:
```

(def text-plain-format
{:decoder [(fn make-json-decoder [options]
(fn [x ^String charset]
(if (string? x)
x
(slurp (InputStreamReader. ^InputStream x charset)))))]

:encoder [(fn make-json-encoder [options]
(fn [data ^String charset]
(ByteArrayInputStream. (.getBytes data charset))))]})
```

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Reproduce la solicitud curl POST /foo y, a continuación, compara la ruta basada en macros con la definición de context/resource. Empieza por la validación del parámetro del body de la ruta del resource y el middleware personalizado text/plain; se considera terminado cuando ambas formas de ruta gestionan la misma solicitud de forma coherente sin el error de validación de String nil.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
clojure
Área
api, backend
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.