#API
162023.01.29
인플루언서 
887프로그래머
참여 콘텐츠 14
5
[gRPC] 프로토콜 버퍼 실습을 통한 이해 (with Go)

프로토콜 버퍼 실습 해보기 © anniespratt, 출처 Unsplash proto 파일 작성해보기 golang [gRPC] 알기이전에 프로토콜 버퍼란 구조 이해하기? gRPC Remote Procedure Calls Protocol Buffers? 이론만 보면 누구에게는 정말 심오하거나 누구에... blog.naver.com 우리는 이전 포스팅에서 프로토콜 버퍼에 대해서 알아보았고 간단하게 사용에 필요한 가이드라인을 간단하게 봤습니다 오늘은 이전 포스팅을 기반으로하여 golang에서 활용할 proto 파일을 작성해보고자 합니다! 필수 패키지 설치 https://github.com/protocolbuffers/protobuf/releases 윈도우일시 위에서 윈도우 버전을 받고 환경변수 설정 필수 $ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28 // @latest $ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2 // @latest 코드 작성 syntax = "proto3"; package prototest ; option go_package = "prototest"; message ProtoData { string Msg = 1; // 외부에서 사용할거라 앞의 문자는 무적권 대문자 아시죠 !! } 컴파...

2023.01.29
2
[gRPC] 알기이전에 프로토콜 버퍼란 구조 이해하기?

gRPC Remote Procedure Calls Protocol Buffers? © geralt, 출처 Pixabay 이론만 보면 누구에게는 정말 심오하거나 누구에게는 정말 쉽게 이해가 될 수 있습니다. 저는 정말 심오하게 이해가되는데 실습을 통해서 하나하나 알아보면 쉽게 이해할 수 있다고 생각합니다. 오늘 내용은 gRPC를 시작하기에 앞서 사용하는 protocol buf에 대해서 알아볼 생각입니다. 프로토콜 버퍼는 데이터의 구조다! 제목 처럼 프로토콜 버퍼는 데이터의 구조라 생각하시면 됩니다. 우리가 주로 사용하고 있는 데이터 구조는 JSON 형식으로 Restful API를 구성하고 HTTP1.1에 심어서 보내는데 비슷하게 프로토콜 버퍼는 바이너리형 데이터로 통신을 한다고 생각하면 된다! 구글에서 설계한 구조 IDL 기반이다 (인터페이스 정의 언어) 서비스 모델 구조 (서비스 1 메시지 2개 가 하나의 묶음이 된다) 메시지 = 요청과 반환 서비스 = 실행 메서드 (원격 함수) 바이너리 형식 네트워크 통신이다 프로토콜 버퍼 코드 이해하기 https://developers.google.com/protocol-buffers/docs/proto3?hl=ko 공식문서를 기반으로 이해를 해보겠습니다! message 정의 syntax = "proto3"; message SearchRequest { string query = 1; int32 p...

2023.01.29
2
[통신] GraphQL 아키텍처

GraphQL 아키텍처 © casparrubin, 출처 Unsplash REST와는 또 다른 통신 아키텍처입니다. 역시 어떠한 요청에 대한 응답을 하기 위한 기술입니다. REST와의 차이점으로는 정확한 요청에 대한 결과를 반환해주는게 목적이며 클라가 중심이된다는 점 GraphQL이란? 페이스북에서 만든 쿼리 언어 이며 어떠한 명확한 요청에 대한 명확한 답을 해주는 아키텍처입니다. SQL과 비슷한듯 비슷하지않은 gql이라고 부루는 언어를 사용합니다 실제로 아직 공부를 해보지는 않았지만 공부가 필요할 거 같습니다. 클라이언트 요청에 따른 반환을 명확하게 해줄수 있으며 해당 기능을 쓸 수 있는 언어들도 많다는 점이 있습니다. (클라이언트 중심이다) 서비스 구성시 중요한 점 클라 GraphQL 모듈 필요 서버 GraphQL 모듈 필요 도움을 주는 라이브러리 Realy (릴레이) Apollo GraphQL (아폴로) 사용 문법 { user { name } } { "data" : { "user": { "name" : "꾹" } } } 참고 문헌/자료 - #GraphQL #gql

2023.01.29
2
[통신] REST 아키텍처

REST에 대해서 이해하기 © deepmind, 출처 Unsplash REST REST란 Representational State Transfer 의 약자이며 HTTP Method에 정보를 함축하여 보내는 기법입니다. 웹 상에서 URI에 데이털르 심어보내는 통신 방식이라고 보면 될거 같습니다! 구성요소 자원 (Resource) URI를 이용하여 구분을한다. /item/:itemNo 행위 (Verb) HTTP Method를 사용 표현 (Representation of Resource) 현재는 JSON을 주로 사용 CRUD 시스템 구성시 사용하며 아래의 메서드별 정의를 해주는게 원칙입니다. GET : 조회시 활용하는 메서드 POST : 생성을 하는 경우 사용하는 메서드 PUT : 업데이트를 하는 경우 사용하는 메서드 ( 만약 없다면 생성 ) DELETE : 데이터를 삭제하는 경우 사용하는 메서드 PATCH : 부분적인 업데이트를 사용하는 메서드 원래라면 모든 메서드를 상황에 맞게 활용하는게 좋다. 하지만 PUT / PATCH 부분에 대해서는 애매한 부분이 분명 존재하기에 대부분에 프로젝트는 GET / POST / DELETE를 기본적으로 활용한다고 보면 된다! 장점 HTTP 플랫폼에 모두 사용이 가능하다. 범용성 보장되며 상호작용을 지원한다. 서버와 클라가 명확하게 구분된다 단점 구조의 표준이 솔직히 없다. REST API REST AP...

2023.01.29
3
[Go] 고 언어 웹 서버 (API 서버)

Golang 웹 서버 (API서버) © jordanharrison, 출처 Unsplash 이제 Go를 활용하여 자신의 프로그램을 만들어보세요! Go의 net/http 패키지를 활용하여 API 서버를 고랭으로 구성해보려고 합니다! 고 언어 웹 서버 뼈대 이해하기! 기본코드를 바로 본다음 이해를 하는게 편할 거 같아서 코드를 먼저 이용하여 프로젝트를 만드시고 해당 프로젝트를 실행시켜주세요 ! 실행 후 localhost:3000을 입력하면 Hello Go라는 내용이 나오는 것을 볼 수 있습니다. package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { fmt.Fprint(writer, "Hello Go") }) http.ListenAndServe(":3000", nil) } HandleFunc란? 우리가 일반적인 웹 언어를 활용하여 개발 시의 핸들러 그 의미와 완전히 동일합니다. 처음 받는 인자로는 엔드포인트를 구성하는 것 입니다. 지금 /는 index페이지입니다 인덱스 페이지랑 웹에 도메인으로 접근 시 메인으로 보여줄 페이지를 의미합니다! 두번째 인자로는 실제 해당 엔드포인트로 접근이 이루어질 시 어떠한 행동을 할지에 대한 함수를 작성하면됩니다. 지금은 익명...

2023.01.25
[기초 완성 Nuxt.js] axios 활용한 API 통신 이해하기

기초완성 넉스트 액시노스 활용한 비동기 통신 이해하기 Nuxt.js Axios 설치와 설정 그리고 기본법 node package manager Nuxt를 설치하는 과정에서 액시오스를 선택하여 설치를 하셨으면 따로 구성할 필요가 없습니다! "해당 설치부분은 설치 과정에서 모듈을 추가적으로 이행하지 않은 경우" 설치해주시면 됩니다. npm install @nuxtjs/axios 액시오스 등록하기 nuxt.config.js Axios 기본사용 <script> export default { async asyncData({ $axios }){ console.log('asyncData') const { data } = await $axios.get('url'); console.log(data); }, async fetch(){ console.log("Fetch"); const { data } = await $axios.get('url'); }, } </script> 위의 예시가 기본 사용방법입니다. 보시면 async와 await를 활용하여 처리하는 부분과 .get 부분이 존재하는 해당 부분은 기존 axios부분이랑 완벽하게 동일하다고 생각하시면 됩니다. Nuxt.js Axios 활용해보기 페이크 서버를 활용한 테스트 페이크 서버의 유저의 정보를 호출하여 뿌려보는 예제 방법을 설명하기 위해서 asyncData 부분과 fetch 부분에 코드를 작성...

2022.10.21
2
[Node.js] Axios 모듈 알아보기!

AJAX ? Axios ? 자신이 편한것을 사용하라! © dell, 출처 Unsplash 처음으로 AJAX (아작스, 에이작스)를 위주로 보통 비동기 통신 작업을 하고 있었던 나로써 새로운 언어에 대해서 공부를 하거나 프로젝트를 구성하다보면 Axios를 많이 사용하는 경우가 있었다. 솔직히 말하면 나는 그런 코드가 있으면 그냥 버리고 Ajax로 최대한 구현을 해버렸지만... "시대의 바뀜에 움직일 줄 알아야한다는 생각으로 액시오스 모듈을 접하기로 마음을 먹었다!" (자료들을 찾아보니 Ajax와 거의 동일하며 내부적인 건 모르지만 외적으로 사용하는 건 거의 완전하게 동일하다) 액시오스 란? Axios Node.js의 "Promise API활용한 비동기 HTTP 통신 라이브러리"입니다. 백엔드와 프로트엔드 ㄷ통신의 효율성을 높이기 위해서 Ajax와 같이 더불어 사용하기 좋은 라이브러리라고 합니다! 특징 XMLHttpRequest, http api(Node.js)로 모두 활용이 가능하며 HTTP 요청 취소, 응답결과를 자동으로 JSON화 액시오스 설치부터 간단하게 사용하는 방법 설치하기 yarn add axios npm install axios 자신의 패키지 관리 툴 입맛에 맞춰서 설치를 하시면 됩니다. 저는 npm을 활용하였지만 yarn으로 설치가 가능합니다! 당연히 자신의 프로젝트가 속한 디렉토리에서 설치를 하셔야합니다 연결하기 imp...

2022.10.20
[Python] FastAPI 형식에 대해서 알아보기

Python FastAPI 형식에 대해서 알아보기 from fastapi import FastAPI, Header, Cookie, status from fastapi.responses import FileResponse # 파일 웹 페이지 열기 from pydantic import BaseModel # 데이터 받고넘기기용 import time, random from typing import List, Optional, Union FastAPI를 활용한다면 당신은 지금 API서비스를 개발하고 있을 것 입니다. 우리는 그렇기에 상황에 고려하여 구성해주는 것이 아주 좋습니다! Requst 형식 사용방법 기본 부터 차근차근 Resquest Body형식 #Request Body 형식 class ReqeustParams(BaseModel): address :int dong :int ho :int @app.get("/SAMPLE_POST_QueryBodyJSON") def SAMPLE_POST_QueryBodyJSON(data:ReqeustParams): return 'test' Header/Cookie 받아오기 #Header/cookie 정보 @app.get("/SAMPLE_HeaderCookie") def SAMPLE_HeaderCookie(user_agent: str = Header(None), x_token: List[str] = Hea...

2022.08.26
2
[Python] fastAPI (메서드 및 uvicorn) 옵션

fastAPI method type과 uvicorn 옵션 © artturijalli, 출처 Unsplash method type 상황에 맞는 메서드 타입을 구성하자! 메서드 타입을 지정하는 이유는 Restful API작성의 기본이라고 하니깐 짚고 넘어가자 데이터를 받기 위해선 보통 POST 그렇지 않은 경우는 GET으로 그냥 작성하지만 그래도 뭐가 있는 지 짚고 넘어가자 @app.get() @app.post() @app.put() @app.delete() @app.options() @app.head() @app.patch() @app.trace() OPTIONS와 같은 경우는 브라우저 자체가 주로 발생시키는 것이니 간단하게 있다고만 생각하면 됩니다. 우리는 주로 GET POST PUT HEAD 정도를 사요할 것으로 판단됩니다. uvicorn 자주 사용하는 옵션 uvicorn main:app --reload --host=0.0.0.0 --port=8000 main : 어플리케이션의 이름 (즉, 파이썬 프로그램 이름) realod : 프로그램이 수정되면 자동으로 반영하는 것 host : 접근 대상 에 대한 정보 (즉, 특정한 서버에서만 접근을 허용하고자한다면 명시할 것) port : 말그대로 uvicorn의 활성 포트 uvloop가 작동하는 개념인 듯 하다. 상세한 내용은 공식 홈페이지를 참조하는 것이 좋을 것 같다. Uvicorn An...

2022.08.19
[Python] fastAPI (API 특화 프레임워크)

파이썬 API 특화 프레임 워크 fastAPI fastAPI 기본 설치 및 실행 명령어 fastapi 설치하기 pip install fastapi uvicorn 설치하기 pip install "uvicorn[standard]" or pip install uvicorn fastapi 실행하기 uvicorn 파이썬파일명:app --reload --reload 옵션을 활성화하면 파일 변경 시 자동으로 반영된다. fastAPI 사용방법 from fastapi.responses import FileResponse # 파일 웹 페이지 열기 from pydantic import BaseModel # 데이터 받고넘기기용 import random,time,math, pymysql app = FastAPI() @app.get("/") def 메서드명(): return 'data' @app.get("/2") def 메서드명(): time.sleep(random.randrange(10,11)) return {'hello':123} @app.get("/3") def 메서드명(): return FileResponse('파일위치/명') class 모델명_객체명(BaseModel): name :str phone :int @app.post("/send") def 메서드명(data : 모델명_객체명): print(data) return data @app.get("...

2022.08.16
17
[C#] .NET Core 활용한 RESTful API ②

.NET Core 활용한 RESTful API [C#] WCF 활용한 RESTful API ① [C#] WCF RESTful API 만들기 프로젝트 형태 고르기 C#프로그램에서 새로운 신규 프로젝트를 ... blog.naver.com 어제는 닷넷코어가아닌 일반적인 웹 어플리케이션으로 활성화하여 RESTful API를 만드는 것을 알아봤습니다. 오늘은 닷넷코어를 활용하여 RESTful을 만들어보겠습니다. 이 포스팅은 공식 자습서를 토대로 테스트 구성해본 과정입니다. 자습서: ASP.NET Core를 사용하여 웹 API 만들기 ASP.NET Core를 사용하여 웹 API를 빌드하는 방법을 알아봅니다. docs.microsoft.com .NET Core RESTful API 프로젝트 생성 메인 프로젝트는 ASP.NET Core 웹 어플리케이션입니다. 살포시 검색하여서 클릭해주셔도 되고 찾아서 클릭해주셔도 됩니다. 그리고 진행을 쭉쭉 이어가시면 종류를 선택해야합니다. 우리가 만들 프로젝트는 RESTful API니깐 설명에 잘 적혀있는 API라는 어플리케이션 탬플릿을 선택해주세요. 탬플릿 구조 C# 에서 .NET Core RESTful API 탬플릿을 생성하면 위와 같은 구조가 만들어집니다. 모델 클래스 만들기 탬플릿 구조에서는 기본적으로 제공하는 구조를 본 것입니다. 해당 구조를 실행해보면 데이터를 표출하는 것을 확인할 수 있는데요. 우리는...

2021.07.21
24
[C#] WCF 활용한 RESTful API ①

[C#] WCF RESTful API 만들기 프로젝트 형태 고르기 C#프로그램에서 새로운 신규 프로젝트를 생성하겠습니다. WCF 서비스 어플리케이션 라는 탬플릿을 선택하고 살포시 눌러주세요. (WCF 서비스 아니고 서비스 라이브러리도 아닙니다!) 그러면 아래와 같이 탬플릿에서 제공하는 모양으로 껍데기를 구성해줍니다. 기본 구조 알아보기 디렉토리 구조는 위와 같이 구성이됩니다. IService 은 구조 인터페이스라 생각하시면됩니다. 실제 동작코드는 Service1.svc.cs 파일이 담당하며 Web.config설정으로 연결관계를 구성합니다. C# WCF RESTful API 만들기 (기본) 1. Web.Config 수정하기 위의 이미지는 기존 탬플릿에서 제공해주는 webConfig의 코드입니다. 아래의 내용에 추가해줘야할 부분을 추가했습니다. <?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.7.2" /> <httpRuntime targetFramework="4.7.2"/> </system.web> <syst...

2021.07.20
2
[Node.js] REST API 요청 및 반환처리 ②

[Node.js] 활용한 REST API 요청 및 반환받기 해당은 테스트를 위해서 작성한 코드이며 응용하여 실제 타 RESTful API를 요청하고 결과를 토대로 자신의 프로젝트를 완성해보세요. 필수 모듈 설치하기 Node에서 RESTapi를 활용하려고 하시면 request 패키지를 설치해주셔야합니다. 패키지설치 npm install request 작성파일 const request_api = require('request'); 패키지가 없는 경우 작업을 진행할 폴더에서 npm을 활용하여 request를 설치해주세요. 그 후 연결을 하여 활용해주시면 됩니다. REST API 테스트 해보기 해당 코드는 이전 API 만드는 과정에 일부 소스입니다. 테스트를 위해서 우리는 외부에서 요청을 할 것이며 요청된 기능에서 노드에서 RESTful API를 요청하면 어떤식으로 이루어지는 지 보기 위한 코드입니다. //CALL 소스 let options = { url:'', method : 'GET', headers : '', body: '', /* json */ json:true }; options.headers = { username : "YYK", userage : 29, mode : "ins" }; options.url = "http://192.168.0.118:9999/return"; request_api(options,function(erro...

2021.07.19
6
[Node.js] REST API 만들기 ①

[Node.js] 활용한 REST API 만들기 해당 포스팅은 노드를 기본적으로 셋팅한 것을 가정하고 진행하겠습니다. 혹시나 설치과정이 궁금하신 분은 아래의 링크를 활용해서 간단하게 설치를 후다닥 마치고 API 개발에 참여해보세요. [Node.js] 설치하기 비쥬얼스튜디오코드 활용하기 Node.js 설치하기 이번에 하는 MQTT와 연동하는 작업해서 활용하게될 서버사이드의 역할은 Node를 활... blog.naver.com Node.js REST API 기본 Node.js를 활용하여 API만들기 해당 방법을 응용하여 react, Vue등 다양한 파생 언어에서도 누구나 손쉽게 만들 수 있습니다. 하지만 서버단에서 보통하는 행위이다 보니 별도로 구분하여 Node.js를 통해서 개발하시는 것을 추천합니다. 노드 REST API를 만들기 이전에 Node를 활용하여 간단하게 Hello Node World를 찍어보겠습니다. 코드 분석 const http = require('http'); //HTTP 라이브러리를 http에 연결 http.createServer(function(req, res) { var url = req.url; //도메인 이후 주소정보 if(url == "/"){ //도메인 접근 시 try{ res.writeHead(200,{'Content-Type':'text/html'}); res.end("hello Node World",...

2021.07.19