同學,GraphQL了解一下 實踐篇

2021-09-13 16:58:21 字數 2985 閱讀 2572

技術棧準備

核心依賴(npm包):

express:node服務端框架;

apollo-server-express:express graphql中介軟體,提供graphiqlexpress與graphqlexpress兩個方法;

graphql:graphql js實現基礎庫;

axios:ajax通訊,這裡用於和已有的restful api通訊;

除了安裝以上的核心依賴,你還需要安裝babel相關的依賴,並配置babel編譯檔案,具體可檢視上面git下來的檔案配置。

搭建服務

怎麼引入包這裡不再贅述,我們先不帶入graphql,啟動乙個express服務:

const port = 8080;

res.send('hello graphql!');

});

啟動這個服務,並在瀏覽器輸入http://localhost:8080/graphql,可以看到hello graphql這段歡迎詞,到這裡我們的後端服務已經搭建成功,接著我們建立我們的graphql服務,刪除監聽'/graphql'這個路由的**,新增一下一段**:

import schema from './schema';

const port = 8080;

endpointurl: '/graphql'

}));

至此,我們就新增了graphql服務,graphql是用於接收url請求的,而graphiql會呈現乙個graphql查詢介面,這個介面可以用於查詢體驗,檢視文件定義,這是graphql官方比較推薦的乙個技術,就像下面這樣:

import  from 'graphql/type';

import from '../service/index';

// 查詢某乙個user的詳細資料模型

const usertype = new graphqlobjecttype(,

username: ,

usermixnick:

},resolve: (root, args, context, info) => = root;

console.log(info)

return getusermixnick(id);}},

military: ,

age: ,

height: ,

education: ,

enlisttime: ,

enlistyear: ,

}});

// 查詢所有的users

const paginationtype = new graphqlobjecttype(,

pagenum: ,

total: ,

data:

}});

// 定義schema

const schema = new graphqlschema(

},resolve: (root, args, context, info) => = args;

return getuser(id);}},

users: ,

pagesize:

},resolve: (root, ) => }}

})});

export default schema;

這裡不想花太大的篇幅去講解,可以git clone下來自己嘗試一下,至此我們就成功的建立了乙個graphql服務,可以在graphiql介面查詢體會一下。

頁面結構

這裡需要強調一下client**的實現:

const client = new apolloclient(,

});

列表頁的實現

react-apollo在實現graphql結合react程式設計的方式上,借鑑了類似react-redux的connect高階元件的思想,react-apollo提供乙個方法graphql用於生成乙個容器,這個容器會從遠端拉去資料,然後作為props傳遞給展示元件,直接看**的實現:

// 建立乙個查詢  

const users_query = gql`

query userquery($pagenum: int,$pagesize:int)}}

`;// 生成乙個graphql容器,會執行users_query這個查詢;

const withquery = graphql(users_query, ,

}),});

// 列表展示元件

class list extends component ;

}render() } = this.props;

if (loading)

const = users;

return (

總共有名軍士);}

}// 將資料注入到展示元件中

const character = withcharacter(list);

export default character;

以上就是對列表展示元件的實現,思想還是比較簡單,和我們基於react + redux程式設計比較像。

詳情頁的實現

其實現思路和列表頁其實是一樣的,只是涉及到動態傳參的問題,上查詢那一段**說一下:

const user_query = gql`

query userquery($id: id!)}`;

const withquery = graphql(user_query, } = props; // 重點就是從props中獲取路由傳遞的引數

return ,

};},

});

withquery這個高階元件同樣可以從父元件中獲取props,然後通過其option方法動態的生成查詢引數,至於詳細頁展示元件的實現,可以具體參考git上面的**。

到最後輸入url可以看到如下的結果:

了解一下NTLM

ntlm 在客戶機與伺服器之間提供身份認證的安全包。ntlm 身份驗證協議 是 質詢 應答身份驗證協議,是windows nt 4.0 及其早期版本中用於網路身份驗證的預設協議。windows 2000 中仍然支援該協議,但它不再是預設的。ntlm身份驗證過程 ntlm 是用於 windows nt...

了解一下 display flex

一 display flex flex 是flexuble box的縮寫,意為 彈性盒子 用來為盒狀模型提供最大的靈活性.任何乙個容器都可以指定為flex布局.box 行內元素也可以使用flex布局.box webkit核心的瀏覽器,必須加上 webkit box 注意為父級設計flex布局以後,子...

指標了解一下

在c語言中,我們會頻繁的使用指標,那麼什麼是指標?首先我們來看一段 include int main 假如建立的變數a的位址為0x0000ff11,那麼指標變數指向變數a,存放的是變數a的位址。總結 指標就是位址,指標變數是變數,指標變數是用來儲存位址的變數。存放在指標變數中的值都會被當做位址來處理...