Articles of rest

在没有用户身份validation的情况下保护私有REST API的最佳方式

我正在为我的移动应用程序制作一些Restful API。 APP和Web服务器之间的通信必须在REST中进行。 这些apis应该是私有的,只有我的应用程序才能调用它们以获得成功的结果。 困难的部分是,我的应用程序中不需要用户ID和密码,因此我不知道如何在没有基本用户身份validation的情况下使用移动应用程序限制rest API。 我认为一种解决方案是嵌入某种硬编码字符串,因此当移动应用程序将使用restful url时,他们将通过ssl以加密格式传递。 但我知道这似乎是非常糟糕的解决方案.. 请在这种情况下建议什么应该是最好的解决方案。

调试改进错误消息的最佳方法

我是Retrofit的新手。 我使用过Volley,我有点像Retrofit。 当我在尝试执行POST时遇到这个非描述性的错误消息时,我正准备选择Retrofit。 Exception in thread “main” retrofit.RetrofitError at retrofit.RetrofitError.httpError(RetrofitError.java:37) at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:413) at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:282) at myapi.api.$Proxy7.logon(Unknown Source) at myapi.api.TestDriver.main(TestDriver.java:94) 好吧,我必须说这种types的错误信息与撒哈拉沙漠中的温暖夹克一样有用。 有没有人知道从哪里开始调试这种types的消息? 我真的不想委托一个没有提供有用错误消息的REST api。

Android Volley给了我400错误

我正在尝试向我的API发出POST请求,它在Postman (我得到一个有效的JSON对象),但不使用Volley 。 使用以下代码: String URL = “http://somename/token”; RequestQueue queue = Volley.newRequestQueue(StartActivity.this); queue.add(new JsonObjectRequest(Method.POST, URL, null, new Listener() { @Override public void onResponse(JSONObject response) { // handle response Log.i(“StartActivity”, response.toString()); } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // handle error Log.i(“StartActivity”, error.toString()); } }) { @Override public Map getHeaders() throws AuthFailureError […]

如何使用SyncAdapter处理远程服务器的RESTful更新

我观看了Google I / O REST演讲并阅读了幻灯片: http : //www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html 关于如何很好地处理远程服务器引发的更新错误,我仍然有点不清楚。 我已经实现了自己的ContentProvider和SyncAdapter。 考虑这种情况: 通过REST调用更新用户的联系人详细信息: 使用ContentResolver请求更新。 我的ContentProvider 立即更新应用程序的本地Sqlite数据库并请求同步(根据Google I / O对话中的建议)。 调用我的SyncAdapter.onPerformSync()并执行REST调用以更新远程数据。 远程服务器响应“错误:无效的电话号码”(例如)。 我的问题是,SyncAdapter向我的ContentProvider发出信号的最佳方式是,这个更改需要从应用程序的本地数据库中退出,并向我的Activity发出更新请求失败的信号(并传递返回的错误消息)从服务器)? 我的活动需要在等待结果时显示进度微调器,并知道请求是成功还是失败。 为了使用来自服务器的内容更新本地应用程序数据库,SyncAdapter模式对我来说非常有意义,而且我的工作正常。 但是对于从应用程序到服务器的更新,我似乎无法find处理上述方案的好方法。 另一件事……;) 假设我调用ContentResolver.notifyChange(uri,null,true); 来自我的ContentProvider的update()方法。 与android:supportsUploading=”true”一起使用true android:supportsUploading=”true”将导致我的SyncAdapter的onPerformSync()被调用。 太棒了,但是在onPerformSync()里面,如何判断我应该同步哪个URI? 每次收到Sync请求时,我都不想简单地刷新整个数据库。 但是你甚至无法将Bundle传递给notifyChangeCall()以传递给onPerformSync()。 我在onPerformSync()上看到的所有例子都非常简单,并没有使用自定义的ContentProvider,那里有任何现实世界的例子吗? 而且文档有点像鸟巢。 先生,维吉尔·多布扬斯基(Virgil Dobjanschi),你没有划桨就把我留在了小溪里。

改造2 @path Vs @query

我是新手改造2库。我读了几篇文章作为初学者入门,我设法从我的RESTful API中获取XML数据而不指定参数。在我的方法中生成XML资源如下。 @GET @Path(“/foods”) @Produces(MediaType.APPLICATION_XML) public List getFoodPyramid() { Session session = HibernateUtil.getSessionFactory().openSession(); trans = session.beginTransaction(); List foodList = session.createQuery(“from FoodPyramid”).list(); try { trans.commit(); session.close(); } catch (Exception e) { session.close(); System.err.println(“Food Pyramid fetch ” + e); } System.err.println(“Am in the food modal. . . . . . . .”); return foodList; } 现在当我试图在界面中传递参数时 @GET(“user/{username}/{password}”) […]

如何禁用Volley请求重试?

我将JsonRequest发布到服务器。 服务器很慢。 Volley倾向于对慢速服务器进行多次调用,因为它没有得到第一个请求的响应(因为我的服务器很慢)。 有没有办法禁止Volley重试请求,以便它可以收到第一个响应? 我努力了: myRequest.setRetryPolicy(new DefaultRetryPolicy( TIMEOUT_MS, RETRIES, BACKOFF_MULT)); 我已经替换了TIMEOUT_MS = 0,RETRIES = 0,甚至BACKOFF_MULT = 0,但它不起作用。 还有其他建议吗?

如何使用Retrofit为所有请求定义标头?

我正在寻找一种解决方案来定义在所有请求中使用的唯一标头。 今天我使用@Header对每个请求传递像参数一样但我想只定义在所有请求中工作的头,而不需要像参数一样传递,例如在我的请求@POST和@POST上修复此Header 今天我用这个。 请注意,每个请求@GET我都需要将Header定义为参数。 //interface @GET(“/json.php”) void getUsuarioLogin( @Header(“Authorization”) String token, @QueryMap Map params, Callback response ); //interface @GET(“/json.php”) void addUsuario( @Header(“Authorization”) String token, @QueryMap Map params, Callback response ); //using public void getUsuarioLogin(){ Map params = new HashMap(); params.put(“email”, “me@mydomain.com”); params.put(“senha”, ConvertStringToMD5.getMD5(“mypassword”)); RestAdapter adapter = new RestAdapter.Builder() .setLogLevel(RestAdapter.LogLevel.FULL) .setEndpoint(WebServiceURL.getBaseWebServiceURL()) .build(); UsuarioListener listener = adapter.create(UsuarioListener.class); […]

错误java.lang.RuntimeException:Stub! 在Android中使用Fitnesse测试

我正在尝试使用Fitnesse框架创建一个测试夹具,我想测试一个从服务器检索数据的函数(RESTFUL服务)。 我的测试用例非常简单: public class FriendListActivityFixture extends ColumnFixture { public int URL; public String test() { JSONArray array = JsonHelper.getJsonArrayFromUrl(“http://107.22.209.62/android/get_users.php”); return array.toString(); } } public static JSONArray getJsonArrayFromUrl(String url) { InputStream input = null; String result = “”; JSONArray jsonArray = null; try { HttpClient httpclient = CustomHttpClient.getHttpClient(); HttpPost httppost = new HttpPost(url); HttpResponse response = […]

执行同步PUT请求时在Retrofit中的EOFException

在我的应用程序中,我使用Retrofit库进行同步 PUT请求。 问题是:有时库会抛出EOFException 。 以下是其中一种情况的堆栈跟踪 29099-29269/com.mycompany.myapp D/Retrofit﹕ java.io.EOFException at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:192) at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:189) at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101) at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:676) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:426) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:371) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:466) at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:73) at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38) at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321) at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240) at $Proxy7.addEvents(Native Method) at com.mycompany.myapp.api.MyService.addEvents(MyService.java:59) 我尝试了以下展示的解决方案,但在我的案例中没有一个有用: Retrofit仅在第一次提供EOFException bug retrofit.RetrofitError:适用于Android的java.io.EOFException 1.4.0 String中的新行导致retrofit.RetrofitError:java.io.EOFException 以下是我在应用中创建RestAdapter : OkHttpClient okHttpClient = new OkHttpClient(); RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(Url) .setRequestInterceptor(new […]

如何使用带有字符串主体的齐射发送POST请求?

我正在开发一个Android应用程序,它与我写的RESTful Web服务进行通信。 使用Volley进行GET方法非常简单,但是我不能把手指放在POST方法上。 我想在请求正文中发送带有String的POST请求,并检索Web服务的原始响应(如200 ok , 500 server error )。 所有我能find的是StringRequest ,它不允许发送数据(正文),并且它还限制我接收解析的String响应。 我还遇到了JsonObjectRequest ,它接受数据(正文)但检索解析的JSONObject响应。 我决定编写自己的实现,但我找不到从Web服务接收原始响应的方法。 我该怎么做?