Spring Cloud OpenFeign: Difference between revisions

From Chorke Wiki
Jump to navigation Jump to search
 
(7 intermediate revisions by the same user not shown)
Line 53: Line 53:
|}
|}


==Mock REST API==
==Mocking API==
<source lang="bash">
<source lang="bash">
mkdir -p ~/Documents/flask-playground/MockApi
mkdir -p ~/Documents/flask-playground/MockApi
Line 62: Line 62:


<source lang="bash">
<source lang="bash">
           rm rf ~/Documents/flask-playground/MockApi/*
           rm rf ~/Documents/flask-playground/MockApi/*.py
cat << EOF | tee ~/Documents/flask-playground/MockApi/__init__.py >/dev/null
cat << EOF | tee ~/Documents/flask-playground/MockApi/__main__.py >/dev/null
from flask import Flask, request, json, jsonify
from flask import Flask, request, json, jsonify
import time
import time
Line 74: Line 74:
@app.route("/api/v1/companies")
@app.route("/api/v1/companies")
def data():
def data():
    time.sleep(5)
     lang_code = request.args.get('lang_code')
     lang_code = request.args.get('lang_code')
     print(f'lang_code: {lang_code}!')
     print(f'lang_code: {lang_code}!')
    #return json.dumps(companies)
#   return json.dumps(companies)
    time.sleep(5)
     return jsonify(companies)
     return jsonify(companies)


if __name__ == "__main__":
if __name__ == "__main__":
     app.run(host='127.0.0.1', port=1983)
     app.run(host='127.0.0.1', port=1983, debug= True)
EOF
EOF
           python ~/Documents/flask-playground/MockApi/__init__.py
           python ~/Documents/flask-playground/MockApi
</source>
</source>


Line 89: Line 89:
time curl -k http://127.0.0.1:1983/api/v1/companies?lang_code=EN
time curl -k http://127.0.0.1:1983/api/v1/companies?lang_code=EN
time curl -i http://127.0.0.1:1983/api/v1/companies?lang_code=EN
time curl -i http://127.0.0.1:1983/api/v1/companies?lang_code=EN
    time http GET 127.0.0.1:1983/api/v1/companies?lang_code=EN --pretty=colors
      time http GET 127.0.0.1:1983/api/v1/companies?lang_code=EN --pretty=colors
</source>
</source>


Line 95: Line 95:
{|
{|
| valign="top" |
| valign="top" |
* [https://docs.spring.io/spring-cloud-openfeign/docs/3.1.3/reference/html/appendix.html OpenFeign » Common application properties]
* [https://docs.spring.io/spring-cloud-openfeign/docs/3.1.3/reference/html/appendix.html OpenFeign » 3.1 » Common application properties]
* [https://stackoverflow.com/questions/40262132/ OpenFeign » Add a Request Interceptor]
* [https://cloud.spring.io/spring-cloud-openfeign/2.1.x/single/spring-cloud-openfeign.html#spring-cloud-feign-overriding-defaults OpenFeign » 2.1 » Overriding Feign Defaults]
* [https://docs.spring.io/spring-cloud-openfeign/docs/3.1.3/reference/html/index.html#spring-cloud-feign-overriding-defaults OpenFeign » 3.1 » Overriding Feign Defaults]
* [https://medium.com/javarevisited/simple-implementation-of-spring-cloud-openfeign-7f022630d01d OpenFeign » Simple Implementation]
* [https://medium.com/javarevisited/simple-implementation-of-spring-cloud-openfeign-7f022630d01d OpenFeign » Simple Implementation]
* [https://www.javacodemonk.com/feign-requestinterceptor-in-spring-boot-cbe5d967 OpenFeign » Request Interceptor]
* [https://www.javacodemonk.com/feign-requestinterceptor-in-spring-boot-cbe5d967 OpenFeign » Request Interceptor]
Line 106: Line 107:


| valign="top" |
| valign="top" |
* [https://cloud.spring.io/spring-cloud-openfeign/2.1.x/single/spring-cloud-openfeign.html#spring-cloud-feign-hystrix-fallbackk OpenFeign » 2.1 » CircuitBreaker Fallbacks]
* [https://docs.spring.io/spring-cloud-openfeign/docs/3.1.3/reference/html/index.html#spring-cloud-feign-circuitbreaker-fallback OpenFeign » 3.1 » CircuitBreaker Fallbacks]
* [https://stackoverflow.com/questions/40262132/ OpenFeign » Add a Request Interceptor]


| valign="top" |
| valign="top" |
Line 127: Line 131:
| valign="top" |
| valign="top" |
* [[JSON Schema Validation]]
* [[JSON Schema Validation]]
* [[Logback]]
* [[WinSW]]
* [[WinSW]]
* [[Log4j2]]
* [[Spring]]
* [[Spring]]
* [[Flask]]
* [[Flask]]

Latest revision as of 02:27, 13 February 2024

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
       </dependency>
       <!--
       others dependencies
       -->
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <dependency>
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-okhttp</artifactId>
    </dependency>
    <dependency>
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-httpclient</artifactId>
    </dependency>
</dependencies>

timeout 60 telnet localhost 1983 \
;printf '\n'
nc -w 60 localhost 1983 \
;printf '\n'

Mocking API

mkdir -p ~/Documents/flask-playground/MockApi
python3 -m venv ~/.venv/flask --prompt="Flask"
source ~/.venv/flask/bin/activate
pip install Flask
           rm rf ~/Documents/flask-playground/MockApi/*.py
cat << EOF | tee ~/Documents/flask-playground/MockApi/__main__.py >/dev/null
from flask import Flask, request, json, jsonify
import time

app = Flask(__name__)
app.json.sort_keys = False

companies = [{'id': 1, 'name': 'Chorke', 'concern': False}, {'id': 2, 'name': 'Academia', 'concern': True}]

@app.route("/api/v1/companies")
def data():
    time.sleep(5)
    lang_code = request.args.get('lang_code')
    print(f'lang_code: {lang_code}!')
#   return json.dumps(companies)
    return jsonify(companies)

if __name__ == "__main__":
    app.run(host='127.0.0.1', port=1983, debug= True)
EOF
          python ~/Documents/flask-playground/MockApi
time curl -k http://127.0.0.1:1983/api/v1/companies?lang_code=EN
time curl -i http://127.0.0.1:1983/api/v1/companies?lang_code=EN
      time http GET 127.0.0.1:1983/api/v1/companies?lang_code=EN --pretty=colors

References