JSP/SERVLET
2020.10.03 / 18:17

java - Ä«Ä«¿ÀÆäÀÌ - Ä«Ä«¿ÀÅå rest api ¿¹Á¦

Ãß¼®µ¹ÀÌ
Ãßõ ¼ö 232

¾Èµå·ÎÀ̵忡¼­ RESTful À¥ ¼­ºñ½º¸¦ È£ÃâÇÏ´Â ¹æ¹ý? (7)

Jersey Framework ¹× Java¸¦ »ç¿ëÇÏ¿© Netbean IDE¿¡ REST À¥ ¼­ºñ½º¸¦ ÀÛ¼ºÇß½À´Ï´Ù.

»ç¿ëÀÚ°¡ »ç¿ëÀÚ À̸§°ú ¾ÏÈ£¸¦ Á¦°øÇؾßÇÏ´Â ¸ðµç ¿äû¿¡ ​​´ëÇØÀÌ ÀÎÁõÀº ¸ð¹ü »ç·Ê°¡ ¾Æ´Õ´Ï´Ù ( curl -u username:password -X PUT http://localhsot:8080/user ¿Í °°Àº curl ¸í·É curl -u username:password -X PUT http://localhsot:8080/user ) .

ÀÌÁ¦ Android Ŭ·¡½º¿¡¼­ REST À¥ ¼­ºñ½º¸¦ È£ÃâÇÏ·Á°íÇÕ´Ï´Ù.

¾î¶»°ÔÇؾßÇմϱî?

DefaultHttpClient ¹× CredentialUsernameAndPassword ¸¦ »ç¿ëÇÏ´Â Android Ŭ·¡½º°¡ ÀÖÁö¸¸ Eclipse¿¡¼­ ½ÇÇàÇÒ ¶§ ·±Å¸ÀÓ ¿¹¿Ü ¶Ç´Â SDK ¿¹¿Ü°¡ ¹ß»ýÇÏ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù.


RestTemplateÀÌÀÖ´Â Android ¿ë Spring »ç¿ë https://spring.io/guides/gs/consuming-rest-android/

// The connection URL 
String url = "https://ajax.googleapis.com/ajax/" + 
    "services/search/web?v=1.0&q={query}";

// Create a new RestTemplate instance
RestTemplate restTemplate = new RestTemplate();

// Add the String message converter
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());

// Make the HTTP GET request, marshaling the response to a String
String result = restTemplate.getForObject(url, String.class, "Android");

³ª´Â Æí¾ÈÇÑ À¥ ¼­ºñ½º¸¦ È£ÃâÇϱâ À§ÇØ OkHttpClient ¸¦ »ç¿ë OkHttpClient . ¸Å¿ì °£´ÜÇÕ´Ï´Ù.

OkHttpClient httpClient = new OkHttpClient();
Request request = new Request.Builder()
                .url(url)
                .build();

Response response = httpClient.newCall(request).execute();
String body = response.body().string()

³×°¡ÇÏ´Â ÀÏ¿¡ ±×¸¸ÇØ! :)

RESTful Ŭ¶óÀ̾ðÆ®¸¦ SERVICE·Î ±¸ÇöÇÏ°í ÁýÁßÀû ÀÎ ³×Æ®¿öÅ© ÀÛ¾÷À» ÀÛ¾÷ µ¶¸³ ±¸¼º ¿ä¼Ò ÀΠSERVICE ¿¡ À§ÀÓÇÕ´Ï´Ù.

ÀÌ ÅëÂû·ÂÀÖ´Â ºñµð¿À http://www.youtube.com/watch?v=xHXn3Kg2IQE ¿¡¼­ Virgil Dobjanschi°¡ÀÌ ¹®Á¦¿¡ ´ëÇÑ Á¢±Ù ¹æ½ÄÀ» ¼³¸íÇÏ´Â °÷À» È®ÀÎÇϽʽÿÀ.


´ÙÀ½Àº °£´ÜÇÑ Webservice CallingÀ» À§ÇØ ¸¸µç ¶óÀ̺귯¸®ÀÔ´Ï´Ù.

´ç½ÅÀº ÇϳªÀÇ ¶óÀÎ gradle Á¾¼Ó¼ºÀ» Ãß°¡ÇÏ¿© ÀÌ°ÍÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù -

compile 'com.scantity.ScHttpLibrary:ScHttpLibrary:1.0.0'

¿©±â¿¡ »ç¿ëÇÏ´Â µ¥¸ð°¡ ÀÖ½À´Ï´Ù.

https://github.com/vishalchhodwani1992/httpLibrary


¾Èµå·ÎÀ̵忡¼­ RestFulÀ» »ç¿ëÇÏ·Á¸é ´ÙÀ½ ´Ü°è¸¦ µû¸£½Ê½Ã¿À.

1 ´Ü°è

¾Èµå·ÎÀÌµå ºó ÇÁ·ÎÁ§Æ®¸¦ ¸¸µì´Ï´Ù.

2 ´Ü°è

ÀÎÅÍ³Ý ¾×¼¼½º ±ÇÇÑÀÌ ÇÊ¿äÇÕ´Ï´Ù. ¾Æ·¡ Äڵ带 AndroidManifest.xml ÆÄÀÏ¿¡ ÀÛ¼ºÇϽʽÿÀ.

 <uses-permission android:name="android.permission.INTERNET">
</uses-permission>

3 ´Ü°è

´Ù¸¥ ¼­¹ö ¶Ç´Â µ¿ÀÏÇÑ ½Ã½ºÅÛ¿¡¼­ ½ÇÇàÁßÀÎ RestFul urlÀÌ ÇÊ¿äÇÕ´Ï´Ù.

4 ´Ü°è

AsyncTask¸¦ È®Àå ÇÒ RestFul Ŭ¶óÀ̾ðÆ®¸¦ ¸¸µì´Ï´Ù. RestFulPost.java¸¦ ÂüÁ¶ÇϽʽÿÀ.

5 ´Ü°è

RestFull ¿äû ¹× ÀÀ´ä¿¡ ´ëÇÑ DTO Ŭ·¡½º¸¦ ¸¸µì´Ï´Ù.

RestFulPost.java

package javaant.com.consuming_restful.restclient;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import com.google.gson.Gson;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import java.util.Map;
import javaant.com.consuming_restful.util.Util;
/**
 * Created by Nirmal Dhara on 29-10-2015.
 */
public class RestFulPost extends AsyncTask<map, void,="" string=""> {
    RestFulResult restFulResult = null;
    ProgressDialog Asycdialog;
    String msg;
    String task;
    public RestFulPost(RestFulResult restFulResult, Context context, String msg,String task) {
        this.restFulResult = restFulResult;
        this.task=task;
        this.msg = msg;
        Asycdialog = new ProgressDialog(context);
    }
    @Override
    protected String doInBackground(Map... params) {
        String responseStr = null;
        Object dataMap = null;
        HttpPost httpost = new HttpPost(params[0].get("url").toString());

        try {
            dataMap = (Object) params[0].get("data");
            Gson gson = new Gson();
            Log.d("data  map", "data map------" + gson.toJson(dataMap));
            httpost.setEntity(new StringEntity(gson.toJson(dataMap)));
            httpost.setHeader("Accept", "application/json");
            httpost.setHeader("Content-type", "application/json");
            DefaultHttpClient httpclient= Util.getClient();
            HttpResponse response = httpclient.execute(httpost);
            int statusCode = response.getStatusLine().getStatusCode();
            Log.d("resonse code", "----------------" + statusCode);

            if (statusCode == 200)
                responseStr = EntityUtils.toString(response.getEntity());
            if (statusCode == 404) {
                responseStr = "{\n" +
                        "\"status\":\"fail\",\n" +
                        " \"data\":{\n" +
                        "\"ValidUser\":\"Service not available\",\n" +
                        "\"code\":\"404\"\n" +
                        "}\n" +
                        "}";
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return responseStr;
    }
    @Override
    protected void onPreExecute() {
        Asycdialog.setMessage(msg);
        //show dialog
        Asycdialog.show();
        super.onPreExecute();
    }
    @Override
    protected void onPostExecute(String s) {
        Asycdialog.dismiss();
        restFulResult.onResfulResponse(s,task);
    }
}

ÀÚ¼¼ÇÑ ³»¿ë°ú Àüü ÄÚµå´Â http://javaant.com/consume-a-restful-webservice-in-android/#.VwzbipN96Hs È®ÀÎÇϽʽÿÀ.


¾î¼¸é ´Ê¾ú°Å³ª ÀÌ¹Ì »ç¿ë Çغ» ÀûÀÌ ÀÖÁö¸¸ ksoap À̶ó´Â À̸§ÀÇ ¶Ç ´Ù¸¥ °ÍÀÌ ÀÖ½À´Ï´Ù. ¶ÇÇÑ ½Ã°£ ÃÊ°ú°¡ Æ÷ÇԵǾî SOAP ±â¹ÝÀÇ À¥ ¼­ºñ½º¸¦ È¿À²ÀûÀ¸·Î ÆÄ½Ì ÇÒ ¼ö ÀÖ½À´Ï´Ù. ³ª´Â ¶ÇÇÑ ³» ÆĽ̿¡ ¸Â°Ô ¸î °¡Áö º¯°æÀ»Çß´Ù.


ÃÖ±Ù Á¦ 3 ÀÚ ¶óÀ̺귯¸® ÀΠSquare Retrofit ÀÌ ¾÷¹«¸¦ Àß Ã³¸® ÇÒ ¼ö ​​ÀÖ´Ù´Â »ç½ÇÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù.

REST ¿£µå Æ÷ÀÎÆ® Á¤ÀÇ

public interface GitHubService {
   @GET("/users/{user}/repos")
   List<Repo> listRepos(@Path("user") String user,Callback<List<User>> cb);
}

±¸Ã¼ÀûÀÎ ¼­ºñ½º ¹Þ±â

RestAdapter restAdapter = new RestAdapter.Builder()
    .setEndpoint("https://api.github.com")
    .build();
GitHubService service = restAdapter.create(GitHubService.class);

REST ³¡Á¡ È£Ãâ

List<Repo> repos = service.listRepos("octocat",new Callback<List<User>>() { 
    @Override
    public void failure(final RetrofitError error) {
        android.util.Log.i("example", "Error, body: " + error.getBody().toString());
    }
    @Override
    public void success(List<User> users, Response response) {
        // Do something with the List of Users object returned
        // you may populate your adapter here
    }
});

¶óÀ̺귯¸®´Â json Á÷·ÄÈ­ ¹× ȲÆóÈ­¸¦ ó¸®ÇÕ´Ï´Ù. Á÷·ÄÈ­ ¹× Á÷·ÄÈ­¸¦ »ç¿ëÀÚ Á¤ÀÇ ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

Gson gson = new GsonBuilder()
    .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
    .registerTypeAdapter(Date.class, new DateTypeAdapter())
    .create();

RestAdapter restAdapter = new RestAdapter.Builder()
    .setEndpoint("https://api.github.com")
    .setConverter(new GsonConverter(gson))
    .build();