본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android] 제대로 된 REST API 를 구축해보자.

by 돼지왕 왕돼지 2014. 3. 18.
반응형


 [Android] 제대로 된 REST API 를 구축해보자.

 

 제대로 된 REST API 를 구축해보자.


reference : http://mytechaddiction.blogspot.kr/2014/02/rest-interaction-in-android.html?utm_source=Android+Weekly&utm_campaign=4254f212fb-Android_Weekly_91&utm_medium=email&utm_term=0_4eb677ad19-4254f212fb-337262377


Anti-Patterns


1. UI Thread 에서 API Call.


2. Activity 나 Fragment 등에서 Thread 를 만들어 요청


3. 결과를 Memory 에만 저장하여 사용.




Decouple the UI from the http call.


Activity 가 죽을 수 있다.

Config change 가 발생할 수 있다.

Request 를 schedule 할 수 없다.

Test 하기 어렵다.







해결책으로, Service 에 bind 하여 사용하라.


장점

background 에서 작업할 수 있다.

schedule 될 수 있다.


단점

따로 shut down 이 되어야 한다.

다른 thread에서 작업하는 코드가 추가되어야 한다.




일반 Service 의 문제 해결을 위해 IntentService 를 사용해보자.


다른 thread 에서 자동 작업된다.

onHandleIntent 가 return 되면 service 가 자동으로 죽는다.

자동으로 queue 가 된다.

command pattern 이 사용된다.




Save data not only on the memory but on the persistent storage as well.


같은 정보를 또 load 하는것은 cost 가 크다.

prefetch 를 통해 persistent storage 에 저장하면, offline 에서의 그나마 최신 정보로의 접속이 가능하다.


Persistent storage 를 위해

Transaction에서 yieldIfContendedSafely() 를 사용하거나, bulkInsert() 를 사용하자.

그리고 api 가 "since" param 을 제공하면 그것을 비교해서 새로운 data 만 불러오자.







How to Notify UI


LocalBroadcast 를 사용하는 것이 괜찮다.

Service 를 사용하는 경우 bound interface 를 사용하자.

EventBus ( Otto, GreenRoot's EventBus ) 등을 사용하자.



Cursor 를 보존하고 있는 경우에는 cursor.setNotificationUri( ContentResolver, Uri ); 를 사용하면,

insert, delete, update 등에서 ContentResolver.notifyChange( id, null ); 를 사용하여 notify 할 수 있다.

( CursorLoader 를 사용할 경우 )




언제 Data 를 Fetch 할까?


User Input 이 있을 때.

Prefetch.

GCM Push 가 있을 때.




Big Cookie Approach


Cell 전파는 배터리를 엄청 많이 사용한다.

전파 연결을 하는 데 2초정도가 걸린다.

데이터 전송을 할 때마다 보통 30초정도 계속 전파가 연결되어 있다.







이 전체를 위해 Robospice 를 사용해보자.


ui 와의 interaction 을 제거한다.

high level 이며, strong typed 이다.

caching, json parsing, prioritizing 등의 많은 기능이 있다.

Retry Policy 가 있다.

Active 하게 계속 개발된다.


Volley, DataDroid, Ion, Retrofit 등이 있다.


 제대로 된 REST API 를 구축해보자.






반응형

댓글