最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Spring?Boot和JPA創(chuàng)建GraphQL?API

 更新時間:2022年04月27日 11:31:16   作者:?sofia?  
這篇文章主要介紹了利用Spring?Boot和JPA創(chuàng)建GraphQL?API,GraphQL既是API查詢語言,也是使用當(dāng)前數(shù)據(jù)執(zhí)行這些查詢的運行時,下文更多相關(guān)內(nèi)容介紹需要的小伙伴可以參考一下

前言:

GraphQL既是API查詢語言,也是使用當(dāng)前數(shù)據(jù)執(zhí)行這些查詢的運行時。GraphQL讓客戶能夠準(zhǔn)確地要求他們所需要的東西,僅此而已,使API隨著時間的推移更容易發(fā)展,并通過提供API中數(shù)據(jù)的清晰易懂的描述,支持強(qiáng)大的開發(fā)工具。

在本文中,我們將創(chuàng)建一個簡單的機(jī)場位置應(yīng)用程序。

一、生成項目

https://start.spring.io/并生成一個項目,不要忘記添加Spring Web、H2數(shù)據(jù)庫和Spring DATA JPA依賴項。

1. 添加依賴項

要啟用GraphQL的使用,請在下面添加這兩個依賴項。

<dependency>
  <groupId>com.<a  rel="external nofollow"  target="_blank" >graphql</a>-java</groupId>
  <artifactId>graphql-spring-boot-starter</artifactId>
  <version>5.0.2</version>
</dependency>
<dependency>
  <groupId>com.graphql-java</groupId>
  <artifactId>graphql-java-tools</artifactId>
  <version>5.2.4</version>
</dependency>

二、Schema

GraphQL模式定義了通過API可用的數(shù)據(jù)點。模式描述了數(shù)據(jù)類型及其關(guān)系,以及可用的操作,例如檢索數(shù)據(jù)的查詢和創(chuàng)建、更新和刪除數(shù)據(jù)的突變。

在resources文件夾中,創(chuàng)建一個擴(kuò)展名為“.graphqls”的文件,全名為“location.graphqls”。

//Define the Entity attribute
type Location {
 id: ID!
 name: String!
 address: String!
}
type Query {
 findAllLocations: [Location]!
}
type Mutation {
 newLocation(name: String!, address: String) : Location!
 deleteLocation(id:ID!) : Boolean
 updateLocationName(newName: String!, id:ID!) : Location!
}

!”表示該字段為必填字段。

三、Entity 和 Repository

現(xiàn)在創(chuàng)建一個名為Location的實體。該位置應(yīng)該有三個屬性:id、nameaddress,如模式中所述。當(dāng)然,也會產(chǎn)生 Getters, Setters, 和 Constrictors。

然后,在本例中,存儲庫只使用CrudRepository,并擴(kuò)展位置實體。

//imports...
public interface LocationRepository extends CrudRepository<Location, Long> {
}

四、Queries & Exceptions

1. 查詢

查詢允許我們檢索數(shù)據(jù)。每個查詢可以有一個特定的對象,它完全基于查詢中指定的字段返回,您可以添加或刪除字段以匹配您需要的確切數(shù)據(jù),以適合您的特定用例。

創(chuàng)建一個解析器包,然后添加一個實現(xiàn)GraphQLQueryResolver的新查詢類,并添加@Component注釋。我們只需要添加之前在location中輸入的location.graphqls。

//imports...
@Component
public class Query implements GraphQLQueryResolver {
    private LocationRepository locationRepository;
    public Query(LocationRepository locationRepository) {
        this.locationRepository = locationRepository;
    }
    public Iterable<Location> findAllLocations() {
        return locationRepository.findAll();
    }
}

2. Mutator

GraphQL中的Mutator允許它更新存儲在服務(wù)器上的數(shù)據(jù)。與查詢不同,創(chuàng)建、更新或刪除等Mutator會改變數(shù)據(jù)。

現(xiàn)在創(chuàng)建一個mutator包,然后添加一個實現(xiàn)GraphQLMutationResolver和添加@Component注釋的新類Mutation。另外,添加我們之前輸入的location.graphqls。

//imports...
@Component
public class Mutation implements GraphQLMutationResolver {
    private LocationRepository locationRepository;
    public Mutation(LocationRepository locationRepository) {
        this.locationRepository = locationRepository;
    }
    public Location newLocation(String name, String address) {
        Location location = new Location(name, address);
        locationRepository.save(location);
        return location;
    }
    public boolean deleteLocation(Long id) {
        locationRepository.deleteById(id);
        return true;
    }
    public Location updateLocationName(String newName, Long id) {
        Optional<Location> optionalLocation =
                locationRepository.findById(id);
        if(optionalLocation.isPresent()) {
            Location location = optionalLocation.get();
            location.setName(newName);
            locationRepository.save(location);
            return location;
        } else {
            throw new LocationNotFoundException("Location Not Found", id);
        }
    }

3. Exceptions

創(chuàng)建一個異常包,然后添加一個新的類LocationNotFoundException,該類擴(kuò)展RuntimeException并實現(xiàn)GraphQLError

//imports...
public class LocationNotFoundException extends RuntimeException implements GraphQLError {
    private Map<String, Object> extensions = new HashMap<>();
    public LocationNotFoundException(String message, Long invalidLocationId) {
        super(message);
        extensions.put("invalidLocationId", invalidLocationId);
    }
    @Override
    public List<SourceLocation> getLocations() {
        return null;
    }
    @Override
    public Map<String, Object> getExtensions() {
        return extensions;
    }
    @Override
    public ErrorType getErrorType() {
        return ErrorType.DataFetchingException;
    }

現(xiàn)在GraphQL API已經(jīng)可以使用了!

到此這篇關(guān)于利用Spring Boot和JPA創(chuàng)建GraphQL API的文章就介紹到這了,更多相關(guān)創(chuàng)建GraphQL API內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

布尔津县| 瑞昌市| 布尔津县| 离岛区| 北海市| 漠河县| 罗江县| 柳河县| 进贤县| 阿坝| 无锡市| 大足县| 城市| 江城| 房产| 柳林县| 柳河县| 阿城市| 建湖县| 香格里拉县| 涞源县| 昌图县| 阜南县| 武强县| 宿松县| 泗阳县| 肃南| 三原县| 绥德县| 广元市| 贵溪市| 和林格尔县| 商都县| 杂多县| 镇雄县| 长宁县| 金门县| 迭部县| 姚安县| 从化市| 泗水县|