Я довольно новичок в флешке, но под заголовком я хочу создать сервисный объект, который можно использовать во всех контроллерах или сервисах.
В Java (Spring) я бы создал @Bean
:
@Configuration
public class WhateverGatewayBeans {
@Value("{whatever.api.key}")
public String apiKey;
@Bean
public WhateverGateway getWhateverGateway() {
return new WhateverGateway(apiKey)
}
}
, который теперь можно использовать во всех моих @Service
s:
@Service
public class AnyService {
private final WhateverGateway whateverGateway;
@Autowired // Using injection
public AnyService(WhateverGateway whateverGateway) {
this.whateverGateway = whateverGateway;
}
public Something getSomethingFromWhatever(String param) {
return this.whateverGateway.getSomething(param);
}
}
И так далее
@Controller
public class AnyController {
private final AnyService anyService;
@Autowired
public AnyController(AnyService anyService) {
this.anyService = anyService;
}
@RequestMapping(name = "/api/whatever")
public Something getSomething(@QueryParam("param") String param) {
return this.anyService.getSomething(param);
}
}
Обратите внимание, что приведенный выше код был написан на лету и, вероятно, будет не на 100% правильным, но вы поняли, что
Яищем что-то подобное во Flask:
@app.route('/api/something')
def get_something(whatever_gateway):
param = request.args.get('param')
return whatever_gateway.get_something_from_whatever(param)
Здесь whatever_gateway
должна быть полностью инициализирована при запуске сервера.Представьте, что он должен загружаться некоторое время, сервер не должен быть включен до того, как whatever_gateway
будет готов.