相关疑难解决方法(0)

我何时在RESTful API中使用路径参数与查询参数?

我想让我的RESTful API非常可预测.决定何时使用URI而不是使用查询参数来分段数据的最佳做法是什么.

对我来说,支持分页,排序和分组的系统参数在'?'之后是有道理的.但是如果像'status'和'region'这样的字段或其他属性来分割你的收藏呢?如果那些也是查询参数,那么知道何时使用路径参数的经验法则是什么?

rest api-design spring-mvc restful-url restful-architecture

98
推荐指数
6
解决办法
6万
查看次数

REST API,路径变量vs请求参数

我目前正在编写一个Web服务,提供对某些资源的访问.我尝试遵循REST但是我遇到了关于API的某些部分的问题.

我有以下的uris:

  • / myservice/users /:获取所有用户
  • / myservice/users/{userId}:获取特定用户
  • / myservice/badges /:获取所有徽章
  • / myservice/badges/{badgeId}:获取特定徽章

现在,我的问题是,我必须实现一种方法来获得具有特定徽章的所有用户.我可以认为这只是我在用户列表中应用的过滤器,因此以下是uri:

  • ?/为MyService /用户/过滤器=徽章:{badgeId}

或者我可以认为这只是徽章的子资源,因此以下是uri:

  • /为MyService /徽章/ {badgeId} /用户/

哪一个似乎必须'符合REST'?

我必须说我已经阅读了一些关于这个主题的帖子,特别是这个:静态标准:路径参数或请求参数,但它们似乎不能解决我的问题.

rest

9
推荐指数
2
解决办法
1万
查看次数

在Android Retrofit库中将值传递给URL之间的差异

我已尝试将两种类型的值传递给Android Retrofit库中的URL,方法1执行时没有任何错误但方法2抛出错误.

我通过查询键名称发送参数值,方法1中带注释参数的值,方法2中API端点的变量替换

方法2引发的错误:

java.lang.IllegalArgumentException: URL query string "appid={apikey}&lat={lat}&lon={lon}&units={units}" must not have replace block. For dynamic query parameters use @Query.
Run Code Online (Sandbox Code Playgroud)

我的网址:data/2.5/weather?lat = 77.603287&lon = 12.97623&appid = f5138&units = metric

方法1 :(执行良好)

@GET("data/2.5/weather")
Call<Weather> getWeatherReport(@Query("lat") String lat,
                               @Query("lon") String lng,
                               @Query("appid") String appid,
                               @Query("units") String units);
Run Code Online (Sandbox Code Playgroud)

方法2 :(错误)

@GET("data/2.5/weather?appid={apikey}&lat={lat}&lon={lon}&units={units}")
Call<Weather> getWeatherReport1(@Query("apikey") String apikey,
                               @Query("lat") String lat,
                               @Query("lon") String lng,
                               @Query("units") String units);
Run Code Online (Sandbox Code Playgroud)

我尝试过@Path以及第二种方法.

我的问题是1.这两种方法有什么区别?2.为什么第二种方法不起作用?

android retrofit retrofit2

3
推荐指数
1
解决办法
3973
查看次数