mirror of
https://codeberg.org/andyscott/OpenWeather-gRPC-API.git
synced 2024-11-09 06:00:49 -05:00
Updated README.md
This commit is contained in:
parent
a68ccd0421
commit
707a4c8a7d
1 changed files with 85 additions and 1 deletions
86
README.md
86
README.md
|
@ -1,3 +1,87 @@
|
||||||
# OpenWeatherMap-gRPC-Server
|
# OpenWeatherMap-gRPC-Server
|
||||||
|
|
||||||
Microservice that accepts remote procedure calls to fetch weather data
|
A microservice that accepts remote procedure calls to fetch weather data.
|
||||||
|
|
||||||
|
The service uses [protocol buffers](https://developers.google.com/protocol-buffers/docs/overview)
|
||||||
|
to define a [gRPC API](https://grpc.io/docs/what-is-grpc/introduction/) that
|
||||||
|
fetches current and extended weather data.
|
||||||
|
|
||||||
|
Weather data is obtained from [OpenWeather's](https://openweathermap.org/api)
|
||||||
|
high-end servers.
|
||||||
|
|
||||||
|
## Sending Requests
|
||||||
|
|
||||||
|
### Basic Workflow
|
||||||
|
|
||||||
|
1. Generate the necessary code for your preferred language from the files in
|
||||||
|
the proto directory with the protoc compiler
|
||||||
|
2. Import the code into your project
|
||||||
|
3. Use the imported code to allow your client to connect with the server
|
||||||
|
4. Use the imported code within your own functions to make requests
|
||||||
|
|
||||||
|
#### Generating code from the .proto files
|
||||||
|
|
||||||
|
Run protoc from the root of the project. The below example shows how one might
|
||||||
|
generate Go code.
|
||||||
|
|
||||||
|
```
|
||||||
|
protoc -Iproto --go_opt=module=codeberg.org/andcscott/OpenWeatherMap-gRPC-API \
|
||||||
|
--go_out=. --go-grpc_opt=module=codeberg.org/andcscott/OpenWeatherMap-gRPC-API \
|
||||||
|
--go-grpc_out=. proto/*.proto
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Importing the code
|
||||||
|
|
||||||
|
Import the code into your project. Example in Go:
|
||||||
|
|
||||||
|
```
|
||||||
|
import pb "codeberg.org/andcscott/OpenWeatherMap-gRPC-API/proto"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Using the imported code to connect to the server
|
||||||
|
|
||||||
|
First, enable your client to connect to the server. Example in Go:
|
||||||
|
|
||||||
|
```
|
||||||
|
conn, err := grpc.Dial("localhost:5000", grpc.WithTransportCredentials(insecure.NewCredentials()))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
|
c := pb.NewWeatherServiceClient(conn)
|
||||||
|
```
|
||||||
|
|
||||||
|
See the [test-client](test-client/main.go) for more details.
|
||||||
|
|
||||||
|
#### Using the imported code to make requests
|
||||||
|
|
||||||
|
In this case, we're requesting the current weather for Corvallis, OR.
|
||||||
|
|
||||||
|
```
|
||||||
|
func doCurrent(c pb.WeatherServiceClient) {
|
||||||
|
res, err := c.Current(context.Background(), &pb.RequestCurrent{
|
||||||
|
City: "Corvallis",
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
log.Println(res.Payload)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
See the [test-client](test-client/current.go) for more details.
|
||||||
|
|
||||||
|
## Receiving the response
|
||||||
|
|
||||||
|
Data will be sent to your client as JSON. Example from the above call:
|
||||||
|
|
||||||
|
```
|
||||||
|
{"coord":{"lon":-123.262,"lat":44.5646},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"base":"stations","main":{"temp":296.87,"feels_like":297.13,"temp_min":294.98,"temp_max":298.62,"pressure":1007,"humidity":70},"visibility":10000,"wind":{"speed":2.14,"deg":284,"gust":1.94},"clouds":{"all":0},"dt":1658811503,"sys":{"type":2,"id":2005452,"country":"US","sunrise":1658753522,"sunset":1658807208},"timezone":-25200,"id":5720727,"name":"Corvallis","cod":200}
|
||||||
|
```
|
||||||
|
|
||||||
|
## UML Diagram
|
||||||
|
|
||||||
|
![UML diagram](info/UML.png)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue