Java 在客户端应用程序中声明REST服务api端点的正确模式?

Java 在客户端应用程序中声明REST服务api端点的正确模式?,java,android,ios,objective-c,swift,Java,Android,Ios,Objective C,Swift,这是一个代码风格和体系结构问题。而且它不仅仅针对iOS或Android。在客户端应用程序中声明\存储REST api端点(URL)的最佳和最正确的方法是什么?假设我有一个用于社交网络或其他rest服务的客户端应用程序。此服务有许多不同的api端点:user/login、user/profile、common/list等等。这个端点可能有很多。那么问题是,我应该如何在我客户的应用程序中正确管理它?现在,我只是为iOS声明如下字符串常量:静态NSString*const kLoginUser=@“u

这是一个代码风格和体系结构问题。而且它不仅仅针对iOS或Android。在客户端应用程序中声明\存储REST api端点(URL)的最佳和最正确的方法是什么?假设我有一个用于社交网络或其他rest服务的客户端应用程序。此服务有许多不同的api端点:
user/login
user/profile
common/list
等等。这个端点可能有很多。那么问题是,我应该如何在我客户的应用程序中正确管理它?现在,我只是为iOS声明如下字符串常量:
静态NSString*const kLoginUser=@“user/login”
,Swift:
让loginUser=“user/login”
或在Android中:
“private final string login\u user=“user/login”

但是,如果web服务相当复杂,可能会有40-50个这样的字符串常量或更多。我想知道:也许我做得不对,还有更优雅的方法来管理REST客户端中的端点?任何解释或有趣的方法都会非常有帮助。

我通常认为这样做的方式是为您的变量创建一个枚举电话服务:

protected enum SpecificRestServiceMethods implements RestServiceMethods{
   EXAMPLE_REST_CALL_ONE("/example/service/examplerestcallone"),
   EXAMPLE_REST_CALL_TWO("/example/service/examplerestcalltwo"),
   //etc etc

   private String path;
   private SpecificRestServiceMethods(String path){
     this.path = path;
   }

   public String getName(){
     return this.name();
   }
   public String getPath(){
     return path;
   }
}

然后,在处理常规REST内容的任何类中插入该块。

我认为没有更好的方法将端点URL(或其唯一部分)保存在某些常量中。如果您从一些配置文件中读取它们,这仍然是一个常量,在运行时不应更改


如果你被大量的分数压得喘不过气来,那就把他们分组,尊重他们“的-在一个类中对相关的enpoints进行分组。例如,将访问用户/登录名、用户/配置文件、用户/其他内容的方法放在
UserServices
类中,common/a、common/b、common/rest放在
CommonServices
中。带有enpoint URL的字符串常量将在此服务类中定义

你是怎么做到的?@RomanC我在我的问题中说过:
现在我只是像这样声明字符串常量
这个问题很广泛,有很多不同的解决方案。还有,为什么要反转常量名称?命名一个常量
kUserLogin=@“user/login”
,不是更清楚吗?@IanMacDonald谢谢你的建议。看起来很合理。您能告诉我如何管理端点吗?还声明常量?使用给定端点值的位置有多少?就个人而言,如果我只在一个地方使用端点值,我甚至不需要声明一个常量。java中的枚举可以处理参数吗?那么:EXAMPLE_CALL_THREE(“/EXAMPLE/service/{0}”);我不明白为什么不。使用该特定枚举真正要做的就是为参数存储一个带有占位符的字符串路径。一旦从示例_CALL _THREE中获取路径,如果您使用的是类似于Spring framework的RestTemplate的东西,那么参数将很好地插入。否则,您可以始终使用字符串代码%s而不是{0},然后使用String.format在获取路径后插入参数。