Appwrite의 새 사용자 정의 ID는 무엇입니까?
👋 개술
Appwrite는 핵심 백엔드 수요에 대한 REST와 실시간 API 집합을 제공함으로써 현대 응용 프로그램 구축에 관련된 모든 복잡성을 추상화한다.Appwrite는 사용자 인증과 권한 수여, 데이터베이스, 파일 저장, 클라우드 기능, 웹훅 등을 처리합니다!부족한 것이 있으면, 가장 좋아하는 백엔드 언어로 Appwrite를 확장할 수 있습니다.
Appwrite는 문서, 집합, 파일, 사용자, 팀, 함수 등 다양한 자원을 가지고 있습니다. 이 모든 것은 ID로 표시됩니다!지금까지 이러한 ID는 자동으로 생성되었습니다.이렇게 하는 것은 그들에게 매우 의미가 있지만 개발 환경에서 생산 환경으로 이동하는 개발자에게 ID를 조작하는 것은 약간의 어려움을 가져올 수 있다.사용자 정의 ID는 개발자에게 자신의 ID를 사용하거나 자동으로 생성된 ID를 선택할 수 있도록 제어권을 반환합니다.Appwrite를 사용하는 개발자는 이제 그들의 집합, 함수 등에 의미 있는 ID를 할당할 수 있다.
사용자 정의 ID 지원은 우리 지역사회에서 요구하는 매우 높은 기능 중 하나이며, 단지 가장 가까운 것만 지원한다.믿을 수 없는 커뮤니티의 피드백에 따라 새로운 Appwrite 버전에서 Appwrite가 제공하는 다양한 자원에 사용자 정의 ID에 대한 지원을 도입했습니다.이제 사용자 정의 ID를 구현하는 방법과 이전에 자동으로 생성된 ID를 계속 지원하는 방법에 대해 자세히 살펴보겠습니다.
🔎 사용자 정의 ID 구현
이전에는 Appwrite의 모든
create
단점이 자동으로 새 자원에 13자 길이의 유일한 ID를 생성했다.그러나 사용자 정의 ID에 대한 지원으로 인해 개발자가 원한다면 자동으로 생성된 ID를 편리하게 선택할 수 있기를 바랍니다.사용자 정의 ID를 받는 모든 리소스의 생성 엔드포인트에 새 resource ID
매개 변수를 추가했습니다.ID의 길이는 최대 36자입니다.밑줄, 마침표 또는 하이픈을 포함하는 유효한 영숫자 값은 될 수 있지만 특수 문자로 시작할 수는 없습니다.마지막으로 개발자가 자동으로 생성된 ID를 선택할 수 있도록 unique()
키워드를 추가했습니다. 이 키워드를 전달하면 Appwrite는 이전처럼 자동으로 ID를 생성합니다.자동으로 생성된 ID에 대한 작은 수정도 수행했습니다.이전에는 동일한 초와 동일한 호스트에 ID를 생성하면 반복할 수 있는 경미한 기회가 있었습니다.자동으로 생성된 ID 앞에 엔트로피를 증가시키고 중복을 방지하기 위해 7자 랜덤 문자열을 추가하기로 했습니다.이 릴리즈에서 새 자동 생성 ID의 길이는 이제 20자입니다.이제 사용자 정의 ID가 어떻게 구현되고 검증되는지 알았습니다. 다음은 Appwrite에서 사용자 정의 ID를 지원하는 자원을 살펴보겠습니다.
🤔 모든 자원에서 사용자 정의 ID를 지원합니까?
Appwrite에는 많은 자원이 있지만 모든 자원이 새로운 사용자 정의 ID API를 지원하는 것은 아닙니다.어떤 자원이 사용자 정의 ID를 지원해야 하는지에 대해 우리는 많은 논쟁을 벌였는데 개발자가 직접 상호작용하는 자원에서 사용자 정의 ID를 지원해야 의미가 있다는 결론을 얻었다.포함
🤨 이것은 나에게 무슨 도움이 됩니까?
사용자 정의 ID 지원의 가장 큰 장점은 개발자가 자원에 의미 있는 ID를 분배할 수 있도록 하는 것이다.예를 들어, 도서 집합을 만들려면 id
books
를 주고, 지정한 id로 집합에 있는 문서에 접근할 수 있습니다. 그러면, API를 사용하여 집합에 새 책을 추가하는 것이 더욱 우아해 보입니다. 개발자로서 랜덤 문자열 books
집합을 추적할 필요가 없습니다.사용자 정의 ID가 지원되기 전과 이후에 문서를 나열하는 데 사용되는 코드를 살펴보겠습니다.
사용자 정의 ID 지원 전에 웹에 문서 나열
const sdk = new Appwrite();
sdk
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('5df5acd0d48c2') // Your project ID
;
let promise = sdk.database.listDocuments('5df5acd0d48c2');
promise.then(function (response) {
console.log(response); // Success
}, function (error) {
console.log(error); // Failure
});
사용자 정의 ID를 지원하는 문서를 웹에 나열합니다.
const sdk = new Appwrite();
sdk
.setEndpoint('https://[HOSTNAME_OR_IP]/v1') // Your API Endpoint
.setProject('my-project') // Your project ID
;
let promise = sdk.database.listDocuments('books');
promise.then(function (response) {
console.log(response); // Success
}, function (error) {
console.log(error); // Failure
});
사용자 정의 ID를 사용할 때 코드의 가독성이 훨씬 높습니다.우리는 어떤 항목과 집합을 방문해야 하는지 정확히 알고 있다.그 다음으로 개발과 생산 환경을 위해 두 개의 서로 다른 Appwrite 프로젝트를 설정하려면 프로젝트 ID, 집합 ID, 함수 ID 등을 추적하여 이 자원에 접근해야 한다.모델(개발 또는 생산)에 따라 단독 설정을 만들어야 합니다.환경마다 다른 설정을 만드는 것은 어렵지 않지만 사용자 정의 ID를 사용하면 걱정할 필요가 없다.프로젝트 ID, 컬렉션 ID 및 기능 ID는 개발 및 프로덕션 환경에서 모두 동일할 수 있습니다.끝점만 다를 수 있습니다.
마지막으로 가장 중요하지 않은 점은 REST API를 직접 사용하여 자원에 접근할 때 단점이 더욱 우아해 보인다는 것이다.예를 들어, 우리는 우리가 만든 도서 집합의 문서 목록을 가져오려고 시도하고 있습니다.앞에서 자동으로 생성된 ID를 사용할 때 끝점은 다음과 같습니다.
https://localhost/v1/database/collections/eead3asadf3e1/documents
단점을 보면 어떤 집합과 가능한 문서에 접근해야 할지 알 수 없습니다.수집을 위해 사용자 정의 ID가 설정된 끝점books
은 다음과 같습니다.https://localhost/v1/database/collections/books/documents
URL을 보는 모든 사람들이 쉽게 이해할 수 있습니다. books
집합된 문서를 방문하려고 시도하고 있습니다.이러한 이점은 사용자 정의 ID 지원을 통해 얻을 수 있습니다.이것은 Appwrite를 사용하는 것을 더욱 간단하고 우아하게 할 것이다.다음은 사용자 정의 ID를 지원하기 위한 획기적인 변경 사항을 살펴보겠습니다.✏️ 사용자 정의 ID 지원 후 에셋 만들기
이제 사용자 ID를 지원하는 모든 리소스의 생성 엔드포인트에 새 필수 매개 변수
resourceId
가 있습니다.예를 들어 파일을 만드는 단점fileId
이 필요하고 모든 SDK의 저장 서비스에서 파일을 만드는 방법이 필요합니다fileId
.만약 우리가 이전과 같이 자동으로 ID를 생성하려고 한다면, 이 매개 변수는 사용자 정의 ID 또는 unique()
키워드일 수 있습니다.id
매개 변수는 필수입니다.예: 컬렉션 생성
집합을 만들려면 추가
collectionId
인자가 필요합니다.예를 들어 집합을 만드는 새로운 호출은 다음과 같다.NodeJS SDK
const sdk = require('node-appwrite');
// initialize client
let database = new sdk.Database(client);
database.createCollection('authors', 'Authors', 'collection', ['role:all'], ['role:member']).then(function(response) {
console.log(response);
}, function(error) {
console.error(error);
});
Dart SDKimport 'package:dart_appwrite/dart_appwrite.dart';
void main() async {
// initialize client
final database = Database(client);
try {
final collection = await database.createCollection(
collectionId: 'authors',
permission: 'collection',
name: 'Authors',
read: ['role:all'],
write: ['role:member']
);
print(collection.toMap());
} on AppwriteException catch(e) {
print(e.message);
}
}
이것은 Authors 집합을 만들 것입니다. 집합 ID는 authors
이고 각각 collection
수준의 읽기와 쓰기 권한이 있습니다. role:all
와 role:member
.Delldocs에 방문하여 데이터베이스 서비스의 이 기능과 기타 기능에 대한 정보를 얻으십시오.집합의 ID를 자동으로 생성하려면
database.createCollection
를 다음과 같이 변경하십시오.NodeJS SDK
database.createCollection('unique()', 'Authors', 'collection', ['role:all'], ['role:member']).then(function(response) {
console.log(response);
}, function(error) {
console.error(error);
});
Dart SDK final collection = await database.createCollection(
collectionId: 'unique()',
name: 'Authors',
permission: 'collection',
read: ['role:all'],
write: ['role:member']
);
🤔 이전 버전과의 호환성
모든 사람의 생활이 더욱 순조롭도록 하기 위해서 우리는 변화를 최소화하려고 노력한다.그러나 때로는 변화를 깨는 것이 필요하다.그럼에도 불구하고 우리는 그것을 뒤로 호환시켜 더욱 매끄러운 이동을 실현하도록 한다.사용자 정의 ID 지원이 도입됨에 따라 이전 버전과 호환되도록 요청 필터를 도입했습니다.요청 필터를 사용하면 노드 처리 프로그램에 도착하기 전에 모든 요청을 포착하고 기본값
unique()
을 id 매개 변수에 자동으로 추가하여 이전과 같은 자동 생성을 지원합니다.예를 들어 이전 SDK에서 사용자 만들기 요청을 보내면 요청 필터에서 이 요청에 userId
파라미터가 부족한 것을 발견하고 userId=unique()
요청을 추가하여 사용자 만들기 노드로 전송합니다.이런 방식을 통해 처리 프로그램은 모든 필요한 매개 변수를 얻어 예상한 대로 작업을 한다.이 논리를 사용하려면 x-appwrite-response-format
헤더를 요청에 추가해야 합니다.SDK에서 자동으로 수행합니다.🙏 결론
적절하게 사용하면 ID를 사용자 정의하는 것이 매우 유용한 기능입니다.따라서 API에 대한 액세스를 더욱 세련되고 알기 쉽게 만들 수 있습니다.다양한 자원에 의미 있는 이름을 제공하고 클라이언트 프로그램에서 쉽게 접근할 수 있도록 합니다.Appwrite에 대해 더 알고 싶으면 official docs에 방문하십시오.에서 최신 버전을 볼 수도 있습니다.만약 당신이 Appwrite에 어려움을 겪거나 도움을 필요로 한다면, 당신은 우리Discord community의 우수한 AppWriter에 가입할 수 있습니다.
📚 자세히 보기
다음 리소스를 사용하여 Appwrite 및 서비스에 대한 자세한 내용을 확인하고 도움을 받을 수 있습니다.
Reference
이 문제에 관하여(Appwrite의 새 사용자 정의 ID는 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/appwrite/what-are-appwrites-new-custom-ids--5g6a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)