#r #api #plumber
#r #API #водопроводчик
Вопрос:
У меня есть этот маршрут, который я пытаюсь заставить работать:
#* @get /outcomes-aggregate/<categoryId:int>/<classId>/<perspectiveID>/<sn>
#* @serializer unboxedJSON
function(res, req, categoryId, classId,sn=NULL){
## initialization
query <- NULL
data_to_send <- list()
...
}
Это api
должно принимать запрос с необязательным sn
значением. Однако это не работает. sn
Значение может существовать, а может и не существовать, и запрос выполняется на основе этого значения. Но когда я запускаю его, я продолжаю получать эту ошибку:
call: http://localhost:3982/outcomes-aggregated/1/342342
0 "404 - Resource Not Found"
Это работает, только если я также включу sn
.
call: http://localhost:3982/outcomes-aggregated/1/342342/NULL
Как я могу сделать этот параметр необязательным? Или мне придется создать другую функцию без этого значения?
Обновить
Я обновил маршрутизацию и логику, чтобы попытаться исправить эту проблему.
#* @get /outcomes-aggregate/<categoryId:int>/<classId>/<sn>
#* @serializer unboxedJSON
function(res, req, categoryId, classId,sn=NULL){
## initialization
query <- NULL
data_to_send <- list()
...
if(missing(sn) || pracma::strcmp(sn, "NULL")){
query <- paste0("SELECT * FROM classes WHERE classID = '", classId, "'")
} else{
query <- paste0("SELECT * FROM classes WHERE classID = '", classId, "' and sn = '", sn , "'")
}
...
}
На данный момент это работает, но мне все еще нужно добавить NULL
в URL. Я хотел бы услышать лучший способ сделать это.
Ответ №1:
Ваш путь содержит три параметра, и вы предоставляете только 2. Это работает, когда вы предоставили третий параметр, но он не сопоставлен с sn. Он отображается в perspectiveID.
/outcomes-aggregate/CategoryID:int//
Комментарии:
1. это полезно. Итак, у него должно быть то же имя, что указано в api. Но есть ли способ сделать его необязательным, чтобы он мог принимать либо 2, либо 3 параметра?
2. Я обновил вопрос, основываясь на том, что вы сказали о параметрах. Спасибо, что указали на это
3. Не для параметров пути, он может быть необязательным для параметра запроса localhost:3982/outcomes-aggregated /1 / 342342?sn = NULL
Ответ №2:
Основываясь на ответе @BrunoTremblay, я в конечном итоге преобразовал функцию для использования запроса вместо path. Это сработало нормально.
Новая функция выглядит следующим образом:
#* @get /outcomes-aggregate <-- remove the path
#* @serializer unboxedJSON
function(res, req, categoryId, classId,sn=NULL){
## initialization
query <- NULL
data_to_send <- list()
...
}