在我的应用程序中,我必须接受某些用户参数,如limit
和query
,并逐步构建一个restful api端点。
此代码有效:
const query = (obj) => {
let starter = 'query='
let queryToString = JSON.stringify(obj)
return `${starter}${queryToString}`
}
const params = (str) => `${str}`
const endpoint = (base, params, query) => {
if(!params && !query) return `${base}`
if(!params) return `${base}${query}`
return `${base}?${params}&${query}`
}
当我调用endpoint
函数时,我得到了我想要的输出:
"api.content.io?limit=5&order=desc&query={\"field\":\"title\",\"include\":\"brands\"}"
问题是我必须考虑多个场景
一个。
中没有传递参数湾
中没有传递任何查询℃。
中仅传递参数或查询d。其他查询参数和其他参数将在程序的稍后时间附加
我正在寻找的是一种构图风格的功能,可能如下所示:
const apiEndpoint = endpoint(params(query(value))))
...然后这些单独的功能神奇地处理连接不同的输出, url-编码字符串和处理空值给我一个干净有效的输出。
正如您在上面所看到的,我尝试将代码拆分为具有单一职责的多个功能。但无法弄清楚如何撰写它们。预期的输出是
api.contentstack.io?field=name<e=price&query={limit: 5, order: 'desc')}
或者如果没有传递参数:
api.contentstack.io?query={limit: 5, order: 'desc')}
否则如果未传递查询,则:
api.contentstack.io?field=name<e=price
依旧......
请帮助我理解如何重构和编写我的函数,以便我可以删除endpoint
函数中的条件检查。