将参数发布到API的最佳方法是什么?

时间:2019-06-14 12:53:00

标签: android json api retrofit

就像我公司的一些高级开发人员说的那样,我以错误的方式发布数据。我想知道哪种方法最好。

基本上,我们在“身体参数”中发送数据,例如:-

// In Retrofit or Volley or AndroidFastNetworking

My way :- addBodyParameter("Key",value)

Senior Way :- addBodyParameter(jsonObject)

就像他和我争论的一样,即使我们有一个或多个键,我们也必须在jsonObject中发送参数。

有人可以建议我哪种方法最好吗?我忘了他是iOS开发人员的一件事。

2 个答案:

答案 0 :(得分:1)

通过使用GsonRequest,您可以通过API发布数据。 Gson是一个使用反射将Java对象与JSON相互转换的库。

public class GsonRequest<T> extends Request<T> {
private final Gson gson = new Gson();
private final Class<T> clazz;
private final Map<String, String> headers;
private final Listener<T> listener;

/**
 * Make a GET request and return a parsed object from JSON.
 *
 * @param url URL of the request to make
 * @param clazz Relevant class object, for Gson's reflection
 * @param headers Map of request headers
 */
public GsonRequest(String url, Class<T> clazz, Map<String, String> headers,
        Listener<T> listener, ErrorListener errorListener) {
    super(Method.GET, url, errorListener);
    this.clazz = clazz;
    this.headers = headers;
    this.listener = listener;
}

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
    return headers != null ? headers : super.getHeaders();
}

@Override
protected void deliverResponse(T response) {
    listener.onResponse(response);
}

@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
    try {
        String json = new String(
                response.data,
                HttpHeaderParser.parseCharset(response.headers));
        return Response.success(
                gson.fromJson(json, clazz),
                HttpHeaderParser.parseCacheHeaders(response));
    } catch (UnsupportedEncodingException e) {
        return Response.error(new ParseError(e));
    } catch (JsonSyntaxException e) {
        return Response.error(new ParseError(e));
    }
  }
}

答案 1 :(得分:0)

您上级(iOS开发人员)的方法更好。我将解释原因。 Webservice / API家伙很容易从jsonString创建对象,您已将其作为请求发送给他,这样他就可以将所有输入全部取一个。另一方面,如果您在请求中将多个对象发送到Webservice / API。 Backenf的家伙必须做很多操纵。希望您对此有所了解。

更新

差异

  

发送JsonObject

优势

  1. 后端和前端两个开发人员都必须创建完全相同的类,以便在发送和接收数据时可以正确处理。
  2. 易于将Object转换为jsonString,反之亦然。 (例如android中的GSON)。
  3. 需要编写更少的代码。
  4. 适合大型物体

缺点

  1. 如果某人对Objects进行了任何更改都需要修改给其他开发人员,那么两个开发人员都需要高度协调。
  2. 在创建大型对象时(例如,对象内部的列表)会造成一点困惑
  

发送参数

优势

  1. 适合一个或两个前提参数(int,String,boolean等)。不适用于大物件。如果发送多个自定义对象没有任何意义,否则请创建单个对象。

缺点

  1. 需要编写更多代码。
  2. 对大型物体根本没有好处(如上所述)