어지럽다.. 아니 형기증은 어지러운게 아니지
이거보고 이상한게 안 느껴지는 사람은 API싸개에 적합하지 않으니
진로를 바꾸기 바랍니다
- https://api.bithumb.com/public/ticker/all_btc
- https://api.bithumb.com/public/assetsstatus/BTC
나머지는 취향차이로 둘 수 있는데
참을 수 없는게 딱 2가지 있다
어지럽다.. 아니 형기증은 어지러운게 아니지
이거보고 이상한게 안 느껴지는 사람은 API싸개에 적합하지 않으니
진로를 바꾸기 바랍니다
나머지는 취향차이로 둘 수 있는데
참을 수 없는게 딱 2가지 있다
intellij idea에서 자체적으로 http client를 제공하는데
*.http 파일에 설정해놓고 사용 가능하다.
postman도 공유 export 등등 다 가능하지만 소스코드에 넣어놓고 프로젝트별로 공유할 때는 이게 좀 더 편하다.
특히 API 만들때
남의 API 쓸 때 : Postman
Tools – HttpClient – Open HTTP Requests Collection
오른쪽클릭 – New – Http Request
MSA는 API를 이용해 통신을 한다.
그런데…. 의존성이 생기니까 관리가 힘들다.
버전관리가 필요.
의존성이 있는 모든것을 동시배포
그냥 전체배포라고 보면 된다.
* 서비스가 작을 때 가능
* 오류가 나면 매우 난감함
* DB스키마가 변경됐을 가능성이 크기 때문에 rollback도 쉽지가 않다.
컨트롤러, 라우터 등등에서
/v1/
/v2/
이런방법으로 버전을 표시
* 버전업이 자주 발생하면?
* 헷갈리겠지
jenkins, git-tag, docker, kubernetes 등등 사용해서 해결할 수 있는 부분
해놓으면 편하긴 하겠지만… 구현자체가 복잡하다.
어떻게 배포를 해도 오류가능성이 존재하겠지만… 관리가 쉬운편이 더 낫지 않을까
적절한 방법을 골라서 정책을 정하고 지키는게 중요.
API Doc은 Hunam, Machine – 두가지 버전이 필요하다.
swagger
Hataoes
그리고 json형태의 doc???
에러로깅 방식..??
등 지원
build runtime 버전 check
의존성 api들을 모두 기록해놓는다.
depends on – (auth-1.1)
depends on – (gis-201610)
….
기록해놓은 부분은 내가 참조했 버전이 맞는지 버전만 호출해서 확인.
의존성이 있는 MS들의 test 인스턴스가 떠있거나
docker-compose, kubernetes 등으로 관리되고 있어야 가능한 부분.
아닌가.. 버전만 확인하니까 git 주소만 알아도 가능할 것 같다.
유닛테스트일수도 있는데 좀 더 강하게 빌드시 확인을 해야한다.
멱등성 관련 : http://memo.polypia.net/archives/2505
JWT참고
http://bcho.tistory.com/999
https://jwt.io/
https://blog.outsider.ne.kr/1160
Claim기반 호출
HMAC을 이용한 보안
PPK필요
JWT을 적용해서 쓴다면 대략이정도 느낌이 되면 될것같다.
gradle, maven 테스트, 배포 타이밍에 적절한 조치가 필요할 것 같다.
local에서 할 때는 auth가 제역할을 못해줄 것 같으니
auth서버도 push를 하려면 ppk(auth-ppk)가 있어야하고 ResourceProvider은 auth-ppk(public key)를 가지고 있어야한다.
종이에 그릴땐 간단해보였는데 다시보니 좀 복잡해보인다. 좀 더 간소화 필요.
탐새끼 : https://developers.facebook.com/tools/explorer
왜 이걸 쓰는가?
보통 OAuth Client샘플코드나 라이브러리를 만들어서 데이터를 확인하는데 그 과정을 거치려면 시간낭비도 심하고
코딩에 익숙하지 않거나 … 익숙하더라도 소셜API 호출에 익숙하지 않은 사람은 고생스럽다. OAuth가 표준이라고는 하지만 사이트마다 호출구조가 묘하게 다르기도 하고
형광펜 표시한 부분만 API파라미터 넣어서 호출하면 된다. 예를들어
https://developers.facebook.com/docs/graph-api/reference/v2.8/user/feed
여기있는 feed호출을 보면
/{user-id}
/feed
The feed of posts (including status updates) and links published by this person, or by others on this person’s profile. There are other edges which provide filtered versions of this edge:
/{user-id}/posts
shows only the posts that were published by this person./{user-id}/tagged
shows only the posts that this person was tagged in.All of these derivative edges share the exact same reading structure, however /feed
sh
라고 나와있으니 요즘 열받는 피자헛코리아 아이디를 넣어주고 feed를 넣고 호출 하면 결과가 출력된다.
/pizzahutkorea/feed
API 뽑고 쓰고 별로재미도 없는데 요즘 자주 하게 되네
<beans:bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" > <beans:property name="modelKeys"> <beans:set> <beans:value>results</beans:value> </beans:set> </beans:property> </beans:bean>
결론 : 메서드의 파라미터로 받는다.
T가 있는데 굳이 파라미터로 새로 받으려면 좀 갑갑하지만… 괜히 두번하는것같아서 하기싫지만 현재 이 방법이 가장 좋은것 같다.
토끼 메세지큐 사용중..
//콜백인터페이스 public interface MQCallback<T extends HealthyMonkey> { Class<T> getThis(); T onMessageReceived(T message); } //수신인터페이스 public interface MQReceiver<T extends HealthyMonkey> { T receive(MQCallback<T> callback) throws IOException; } //송신인터페이스 public interface MQSender<T extends HealthyMonkey>{ void send(T domain) throws IOException; void send(List<T> domains) throws IOException; }
위 구조로 만들었는데…. 메세지 프로토콜을 json형태로 정했는데…
<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency>
위에놈을 가지고 jsonString을 domain으로 만들려고 하니 문제가 생기는거다.
T t = (T)JSONObject.toBean(jsonObject, T.class);
를 쓰고싶은데 안되니까… 그래서 콜백에 메서드를 한개 추가해줬다. getThis() 위의 소스코드는 밑의 메서드가 포함되어있다.
T t = (T)JSONObject.toBean(jsonObject, callback.getThis());
그럼 제네릭될때 처리된다.
까먹을까봐…. 그리고 아무나 참고하시라고 써놓는다
제목에 영어와 한글을 섞는건 검색하기 쉬우라고